SQL सर्वर में सभी वर्ण डेटा एक कोलाजेशन से जुड़े होते हैं, जो वर्णों के डोमेन को निर्धारित करता है जिसे संग्रहीत किया जा सकता है और साथ ही डेटा की तुलना और सॉर्ट करने के लिए उपयोग किए जाने वाले नियम भी। Collic Unicode और Non-Unicode दोनों डेटा पर लागू होता है।
SQL सर्वर में कोलाज की 3 व्यापक श्रेणियां शामिल हैं: बाइनरी, विरासत और विंडोज। बाइनरी श्रेणी ( _BIN
प्रत्यय) में विभाजन अंतर्निहित कोड बिंदुओं का उपयोग करते हैं ताकि समानता अंक की तुलना न हो, यदि कोड अंक चरित्र की परवाह किए बिना भिन्न होते हैं। विरासत ( SQL_
उपसर्ग) और विंडोज टकराव अधिक प्राकृतिक शब्दकोश नियमों के लिए छंटाई और तुलना शब्दार्थ प्रदान करते हैं। यह तुलनाओं को मामले, लहजे, चौड़ाई और काना पर विचार करने की अनुमति देता है। विंडोज कोलाजेशन अधिक मजबूत word-sort
नियम प्रदान करता है जो विंडोज ओएस के साथ निकटता से संरेखित करते हैं जबकि विरासत टकराव केवल एकल वर्णों पर विचार करते हैं।
नीचे दिया गया उदाहरण, टेथ चरित्र के साथ विंडोज और बाइनरी कोलेशन के बीच के अंतर को दिखाता है:
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 में उल्लिखित हैं । मैं संक्षेप में कहता हूं कि यह विरासत की अनुकूलता के लिए हो सकता है या वर्ण विहित रूप से समतुल्य नहीं हैं। ध्यान दें कि ﻁ
विभिन्न भाषाओं में टेथ चरित्र का उपयोग किया जाता है ( http://en.wikipedia.org/wiki/Teth )।