Tất cả dữ liệu ký tự trong SQL Server được liên kết với đối chiếu, xác định miền của các ký tự có thể được lưu trữ cũng như các quy tắc được sử dụng để so sánh và sắp xếp dữ liệu. Đối chiếu áp dụng cho cả dữ liệu Unicode và không Unicode.
SQL Server bao gồm 3 loại đối chiếu rộng: nhị phân, di sản và Windows. Các bộ sưu tập trong danh mục nhị phân ( _BIN
hậu tố) sử dụng các điểm mã cơ bản để so sánh để so sánh bằng nhau trả về không bằng nhau nếu các điểm mã khác nhau bất kể ký tự. Di sản ( SQL_
tiền tố) và các đối chiếu Windows cung cấp ngữ nghĩa sắp xếp và so sánh cho các quy tắc từ điển tự nhiên hơn. Điều này cho phép so sánh để xem xét trường hợp, dấu, chiều rộng và Kana. Các đối chiếu Windows cung cấp word-sort
các quy tắc mạnh mẽ hơn , phù hợp chặt chẽ với HĐH Windows trong khi các đối chiếu kế thừa chỉ xem xét các ký tự đơn.
Ví dụ dưới đây minh họa sự khác biệt giữa Windows và đối chiếu nhị phân với ký tự 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;
Lý do tại sao Unicode có thể chứa các điểm mã khác nhau cho các glyph giống hệt nhau được nêu trong http://en.wikipedia.org/wiki/D repeatate_char character_in_Unicode . Tôi tóm tắt, nó có thể là để tương thích di sản hoặc các nhân vật không tương đương về mặt kinh điển. Lưu ý rằng ký tự Teth ﻁ
được sử dụng trong các ngôn ngữ khác nhau ( http://en.wikipedia.org/wiki/Teth ).