ข้อมูลอักขระทั้งหมดใน SQL Server เชื่อมโยงกับการเปรียบเทียบซึ่งกำหนดโดเมนของตัวละครที่สามารถจัดเก็บได้เช่นเดียวกับกฎที่ใช้ในการเปรียบเทียบและเรียงลำดับข้อมูล การจัดเรียงใช้กับทั้ง Unicode และ Non-Unicode data
SQL Server ประกอบด้วย collations 3 ประเภทกว้าง ๆ : ไบนารีมรดกและ Windows การเรียงในหมวดหมู่ไบนารี ( _BIN
ส่วนต่อท้าย) ใช้จุดรหัสพื้นฐานเพื่อเปรียบเทียบดังนั้นการเปรียบเทียบความเท่ากันจะส่งกลับไม่เท่ากันถ้าจุดรหัสแตกต่างกันโดยไม่คำนึงถึงตัวละคร การเปรียบเทียบแบบดั้งเดิม (ส่วนSQL_
นำหน้า) และ Windows ให้การจัดเรียงและการเปรียบเทียบความหมายสำหรับกฎพจนานุกรมที่เป็นธรรมชาติยิ่งขึ้น สิ่งนี้ช่วยให้การเปรียบเทียบเพื่อพิจารณาตัวพิมพ์เล็กและใหญ่, ความกว้างและคะนะ การจัดเรียง Windows ให้word-sort
กฎที่มีประสิทธิภาพมากขึ้นซึ่งสอดคล้องกับ Windows OS อย่างใกล้ชิดในขณะที่การเปรียบเทียบแบบดั้งเดิมพิจารณาเพียงอักขระเดียว
ตัวอย่างด้านล่างแสดงให้เห็นถึงความแตกต่างระหว่าง Windows และการเปรียบเทียบไบนารีด้วยอักขระ Teth:
CREATE TABLE dbo.WindowsColationExample
(
Character1 nchar(1) COLLATE Arabic_100_CI_AS_SC
, Character2 nchar(1) COLLATE Arabic_100_CI_AS_SC
, Character3 nchar(1) COLLATE Arabic_100_CI_AS_SC
, Character4 nchar(1) COLLATE Arabic_100_CI_AS_SC
);
CREATE TABLE dbo.BinaryColationExample
(
Character1 nchar(1) COLLATE Arabic_100_BIN
, Character2 nchar(1) COLLATE Arabic_100_BIN
, Character3 nchar(1) COLLATE Arabic_100_BIN
, Character4 nchar(1) COLLATE Arabic_100_BIN
);
INSERT INTO dbo.BinaryColationExample
VALUES ( NCHAR(65217), NCHAR(65218), NCHAR(65219), NCHAR(65220) );
INSERT INTO dbo.WindowsColationExample
VALUES ( NCHAR(65217), NCHAR(65218), NCHAR(65219), NCHAR(65220) );
--all characters compare not equal
SELECT *
FROM dbo.BinaryColationExample
WHERE
character1 = character2
OR character1 = character3
OR character1 = character4
OR character2 = character3
OR character2 = character4
OR character3 = character4;
--all characters compare equal
SELECT *
FROM dbo.WindowsColationExample
WHERE character1 = character2;
SELECT *
FROM dbo.WindowsColationExample
WHERE character1 = character3;
SELECT *
FROM dbo.WindowsColationExample
WHERE character1 = character4;
SELECT *
FROM dbo.WindowsColationExample
WHERE character2 = character3;
SELECT *
FROM dbo.WindowsColationExample
WHERE character2 = character4;
SELECT *
FROM dbo.WindowsColationExample
WHERE character3 = character4;
เหตุผลที่ว่าทำไม Unicode อาจจะมีจุดที่แตกต่างกันสำหรับรหัสร่ายมนตร์เหมือนมีการระบุไว้ใน http://en.wikipedia.org/wiki/Duplicate_characters_in_Unicode ฉันสรุปว่ามันอาจจะเป็นเพราะความเข้ากันได้แบบดั้งเดิมหรือตัวละครนั้นไม่เทียบเท่ามาตรฐาน โปรดทราบว่าﻁ
มีการใช้อักขระ Teth ในภาษาต่างๆ ( http://en.wikipedia.org/wiki/Teth )