SQL Server의 모든 문자 데이터는 데이터 정렬과 연결되어 데이터를 비교하고 정렬하는 데 사용되는 규칙뿐만 아니라 저장할 수있는 문자 도메인을 결정합니다. 데이터 정렬은 유니 코드 및 비 유니 코드 데이터 모두에 적용됩니다.
SQL Server에는 이진, 레거시 및 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;
유니 코드에 동일한 글리프에 대해 다른 코드 포인트가 포함될 수있는 이유는 http://en.wikipedia.org/wiki/Duplicate_characters_in_Unicode에 나와 있습니다. 요약하면, 레거시 호환성을위한 것일 수도 있고 문자가 정식으로 동일하지 않을 수도 있습니다. Teth 문자 ﻁ
는 다른 언어로 사용됩니다 ( http://en.wikipedia.org/wiki/Teth ).