SQL Server'daki tüm karakter verileri, depolanabilecek karakterlerin etki alanını ve verileri karşılaştırmak ve sıralamak için kullanılan kuralları belirleyen bir harmanlama ile ilişkilendirilir. Harmanlama hem Unicode hem de Unicode olmayan veriler için geçerlidir.
SQL Server 3 geniş harmanlama kategorisi içerir: ikili, eski ve Windows. İkili kategorideki ( _BIN
sonek) harmanlama, karşılaştırmak için temel alınan kod noktalarını kullanır, böylece kod noktaları karakterden bağımsız olarak değişirse eşitlik karşılaştırmaları eşit olmaz. Eski ( SQL_
önek) ve Windows harmanlamaları, daha doğal sözlük kuralları için sıralama ve karşılaştırma semantiği sağlar. Bu, karşılaştırmaların büyük / küçük harf, aksan, genişlik ve Kana'yı dikkate almasını sağlar. Windows harmanlamaları word-sort
, Windows işletim sistemiyle yakından uyumlu daha sağlam kurallar sağlarken, eski harmanlamalar yalnızca tek karakterleri dikkate alır.
Aşağıdaki örnek, Windows ve Teth karakteri ile ikili harmanlama arasındaki farkları göstermektedir:
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'un özdeş glifler için neden farklı kod noktaları içerebileceğinin nedenleri http://en.wikipedia.org/wiki/Duplicate_characters_in_Unicode içinde özetlenmiştir . Özetle, eski uyumluluk için olabilir veya karakterler kanonik olarak eşdeğer değildir. Teth karakterinin ﻁ
farklı dillerde kullanıldığını unutmayın ( http://en.wikipedia.org/wiki/Teth ).