SQL Serverのすべての文字データは照合に関連付けられます。照合は、保存できる文字のドメインと、データの比較と並べ替えに使用されるルールを決定します。照合は、Unicodeデータと非Unicodeデータの両方に適用されます。
SQL Serverには、バイナリ、レガシ、およびWindowsの3つの広範なカテゴリの照合が含まれます。バイナリカテゴリ(_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;
ユニコードに同一のグリフの異なるコードポイントが含まれる理由については、http://en.wikipedia.org/wiki/Duplicate_characters_in_Unicodeで概説されてい ます。要約すると、レガシー互換性のためであるか、文字が標準的に同等ではありません。Teth文字ﻁ
は異なる言語(http://en.wikipedia.org/wiki/Teth)で使用されていることに注意してください。