ฉันมีคำถามทั่วไปเกี่ยวกับฐานข้อมูล เรามักจะใช้คำเปรียบเทียบกับฐานข้อมูล ฉันอยากจะรู้ว่ามันแตกต่างจากชุดตัวละครอย่างไร ฉันเดาว่า collation เป็นเซตย่อยของชุดตัวละคร หากเป็นจริงวัตถุประสงค์ในการเปรียบเทียบหลายครั้งภายใต้ชุดอักขระคืออะไร
ฉันมีคำถามทั่วไปเกี่ยวกับฐานข้อมูล เรามักจะใช้คำเปรียบเทียบกับฐานข้อมูล ฉันอยากจะรู้ว่ามันแตกต่างจากชุดตัวละครอย่างไร ฉันเดาว่า collation เป็นเซตย่อยของชุดตัวละคร หากเป็นจริงวัตถุประสงค์ในการเปรียบเทียบหลายครั้งภายใต้ชุดอักขระคืออะไร
คำตอบ:
ชุดตัวละครเป็นรายการสัญลักษณ์ หากคุณเปรียบเทียบASCIIกับlatin1กับlatin1คุณจะสามารถเขียนคำอเมริกันทั้งหมดได้เนื่องจากlatin1มีอักขระ ASCIIทั้งหมดซึ่งเพียงพอที่จะเขียนคำภาษาอังกฤษใด ๆ ในทางตรงกันข้ามกับASCIIคุณจะไม่สามารถเขียนคำทั้งหมดของภาษาเฉพาะของยุโรปตะวันตกได้เพราะตัวอย่างเช่นตัวอักษร 'À', 'ë', 'õ', 'Ñ' หายไป
การจัดเรียงเป็นเรื่องเกี่ยวกับการเปรียบเทียบระหว่างตัวละคร มันกำหนดชุดของกฎเพื่อเปรียบเทียบอักขระของชุดอักขระ
ใน MySQL การเปรียบเทียบมักเกี่ยวข้องกับหนึ่งภาษา (เช่น 'latin1_swedish_ci', 'latin1_german1_ci' เป็นต้น) เมื่อคุณเรียงลำดับข้อความค้นหาที่เลือกคำที่เริ่มต้นด้วย 'ö' จะอยู่ระหว่างคำสองคำที่ขึ้นต้นด้วย 'o' และ 'p' ในบางภาษา (มีการเรียงบาง) แต่ด้วยการเปรียบเทียบอื่นตัวละครนี้อาจถูกวางไว้อย่างสมบูรณ์ในตอนท้ายซึ่งทำให้การเลือกผลลัพธ์แตกต่างกัน
ตามคำตอบก่อนหน้าชุดอักขระคือชุดของอักขระ (ตัวอักษรตัวเลขอุดมคติเป็นต้น) ที่กำหนดให้กับตัวเลข เพื่อให้สามารถดูได้คุณต้องมีแบบอักษร ("รูปภาพ" เล็ก ๆ ที่เราอ่าน) พวกเขามีความสำคัญในการใช้ LatinX เพราะสำหรับแต่ละ X หมายเลขเดียวกัน (ไบต์) สามารถอ้างถึงอักขระอื่น
ทุกวันนี้การเลือกการเข้ารหัสมีความสำคัญมากกว่า: มาตรฐานคือ UTF-8 ซึ่งเป็นตัวแทนที่ประสบความสำเร็จมากที่สุดของ Unicode (เข้ากันได้กับ ASCII แต่มีความยืดหยุ่นในการรวมทุกภาษาแม้แต่จีนและญี่ปุ่น) และมาตรฐาน W3C มันรวมชุดอักขระทั้งหมด
การเรียงหน้า: เป็นคำโบราณที่มาจากภาษาละติน หมายความว่า: เปรียบเทียบสำเนา (ต้นฉบับ) กับต้นฉบับเพื่อค้นหาความแตกต่าง (ข้อผิดพลาดหรือการเปลี่ยนแปลง) มันมีประโยชน์มากในอดีต แต่ตอนนี้มันเกือบจะเป็นโบราณวัตถุเพราะเอกสารและหนังสือของเราเขียนโดยใช้คอมพิวเตอร์และสำเนามักจะเหมือนกับต้นฉบับเสมอ ตัวอย่าง: ในอิตาลี (มาจากละติน) มีคำกริยา "collazionare" แต่มันอยู่ในพจนานุกรมและไม่มีใครใช้มัน
ดังนั้นการเปรียบเทียบจะกำหนดพฤติกรรมของตัวดำเนินการเปรียบเทียบ: =,>, <, <=,> = ...
แน่นอนว่าโอเปอเรเตอร์เหล่านั้นถูกใช้เพื่อตัดสินใจว่าสองสายเหมือนกันหรือถ้าคำว่า "มากกว่า" อีกคำหนึ่งสำคัญมากถ้าเราต้องการเรียงลำดับ ตัวอักษรไม่อยู่ในลำดับเดียวกันสำหรับทุกภาษาดังนั้นคำอาจมากกว่าหนึ่งอีกคำหนึ่งโดยใช้การเรียงหน้า แต่ไม่ใช้อีกตัว ดู [1] สำหรับตัวอย่างที่ใช้งานได้จริง
การเรียง "bin" นั้นเข้มงวดมากที่สุด: SELECT "b" = "B" => FALSE
การเปรียบเทียบ "ci" ไม่คำนึงถึงขนาดตัวพิมพ์: เลือก "b" = "B" => TRUE
"ทั่วไป" มักจะมองข้ามความแตกต่าง: SELECT "a" = "à" => TRUE
อื่น ๆ มีความเฉพาะสำหรับหนึ่งภาษาขึ้นไป ตัวอย่าง "สวีดิช" (ฉันไม่รู้ว่าทำไมชาวสวีดิชมักเป็นค่าเริ่มต้น)
ฉันยังคงค้นหาเว็บไซต์ที่อธิบายพฤติกรรมของการเปรียบเทียบทุกครั้งโดยละเอียด ... ตัวอย่างเหล่านั้นเกิดจากประสบการณ์ของฉัน