Усі символьні дані в SQL Server асоціюються з зіставленням, яке визначає домен символів, який може зберігатися, а також правила, які використовуються для порівняння та сортування даних. Збірка застосовується як до даних Unicode, так і до даних Unicode.
SQL Server включає 3 широкі категорії зіставлень: двійкові, застарілі та Windows. Збірники у двійковій категорії ( _BIN
суфікс) використовують основні кодові точки для порівняння, тому порівняння рівності повертаються не рівними, якщо кодові точки відрізняються незалежно від символу. Спадкові ( SQL_
префікс) та зіставлення Windows надають семантику сортування та порівняння для більш природних правил словника. Це дозволяє порівнянням враховувати регістр, акценти, ширину та Кану. Збірки Windows надають більш надійні word-sort
правила, які тісно узгоджуються з ОС Windows, тоді як застарілі посилання враховують лише окремі символи.
Приклад нижче ілюструє відмінності між 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 ).