ฉันกำลังเรียนรู้ sqlite จากหนังสือที่กล่าวถึงการเรียงและเรียงลำดับหลายครั้ง มันหมายความว่าอย่างไรในโลกของฐานข้อมูล?
ฉันกำลังเรียนรู้ sqlite จากหนังสือที่กล่าวถึงการเรียงและเรียงลำดับหลายครั้ง มันหมายความว่าอย่างไรในโลกของฐานข้อมูล?
คำตอบ:
โดยทั่วไปวิธีการเรียงลำดับและเปรียบเทียบสตริง
ตัวอย่าง:
เปรียบเทียบ:
เรียงลำดับ:
อักขระพิเศษที่เทียบเท่า
SQL บางตัว (SQL Server 2008+)
DECLARE @foo TABLE (bar varchar(2))
INSERT @foo VALUES ('z'), ('æ'), ('ø'), ('å'), ('ss'), ('ß'), ('a'), ('ä')
SELECT * FROM @foo ORDER BY bar COLLATE Finnish_Swedish_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Norwegian_100_CI_AS
SELECT * FROM @foo ORDER BY bar COLLATE Latin1_General_100_CS_AS --german (western europe) and default
SELECT * FROM @foo ORDER BY bar COLLATE German_PhoneBook_100_CS_AS
"Collation" น่าจะถูกกำหนดไว้อย่างดีที่สุดบน etymology.com
ปลายปี 14c, "การกระทำของการนำมารวมกันและเปรียบเทียบ"
มันไม่ได้เปลี่ยนแปลงเลยในรอบ 600 ปีที่ผ่านมา "เรียง" หมายถึง "เพื่อรวมเข้าด้วยกัน" และไม่ว่าจะเป็นการเรียงลำดับของหนังสือเรียงตามลำดับเวลาหรือในฐานข้อมูลก็เหมือนกันทั้งหมด
มันใช้กับวิทยาการคอมพิวเตอร์สิ่งที่เรากำลังทำคือการแยกกลไกการจัดเก็บจากการสั่งซื้อ คุณอาจเคยได้ยินของASCII-betical ที่อ้างถึงการเปรียบเทียบตามการเข้ารหัสไบนารีของอักขระ ASCII ในระบบนั้นการจัดเก็บและการเปรียบเทียบเป็นสองอย่างเดียวกัน หาก"การเข้ารหัส"มาตรฐาน ASCII เคยเปลี่ยน"การเรียง" (ลำดับ) จะเปลี่ยนเช่นกัน
POSIX LC_COLLATE
เริ่มที่จะทำลายด้วย แต่เมื่อเราย้ายเข้าสู่ Unicode กลุ่ม บริษัท ก็จะปรากฏตัวเพื่อสร้างมาตรฐานการเปรียบเทียบเช่นกัน: ICU
ในข้อมูลจำเพาะ SQL มีสองส่วนขยายเพื่อให้การเปรียบเทียบ
F690
:“ การสนับสนุนการเรียงหน้า:
รวมcollation name
, collation clause
, และcollation definition
drop collation
F692
: การสนับสนุนการเรียงหน้าแบบขยาย
รวมการแนบการเรียงหน้าเริ่มต้นอื่นไปยังคอลัมน์ในสคีมา
เป็นหลักสิ่งเหล่านี้ให้ความสามารถในการCREATE
และDROP
collations เพื่อระบุสำหรับโอเปอเรเตอร์และเรียงลำดับและเพื่อกำหนดค่าเริ่มต้นสำหรับคอลัมน์
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่ SQL เสนอให้ตรวจสอบ
แทนที่จะวางตัวอย่างที่ จำกัด นี่คือชุดทดสอบ PostgreSQL ซึ่งค่อนข้างกว้างขวาง ลองดูอย่างน้อยลิงค์แรกและมองหา'Türkiye' COLLATE "tr-x-icu" ILIKE '%KI%' AS "false"
collate.icu.utf8.out
collate.linux.utf8.out
collate.out
อาจจะไม่คุ้มค่าที่จะเช็คเอาท์ แต่ฉันวางมันไว้ที่นี่เพื่อตรวจสอบ POSIX ที่สมบูรณ์และน่าเบื่อเรียงลำดับ บัตรที่ถูกเจาะถูกเรียงหน้า เร็กคอร์ดไฟล์แฟล็ตถูกเรียงลำดับแล้ว สิ่งนี้ไม่ซ้ำกับฐานข้อมูล
มันเป็นคำอธิบายตัวเองสำหรับข้อความ แต่สำหรับข้อมูลไบนารีที่เก็บไว้เป็นตัวละครมันอาจเป็นเรื่องยุ่งยาก