Collation nedir?
Collation , verilerin nasıl sıralanıp karşılaştırılacağını belirleyen bir kurallar kümesini ifade eder. Karakter verileri, büyük / küçük harf duyarlılığını, vurgu işaretlerini, karakter türlerini ve karakter genişliğini belirleme seçenekleriyle doğru karakter sırasını tanımlayan kurallar kullanılarak sıralanır.Büyük küçük harf duyarlılığı
A ve a , B ve b , vb. Aynı şekilde muamele edilirse, büyük / küçük harf duyarlı değildir. Bir bilgisayar, A'yı farklı şekilde ele alır, çünkü girişi ayırt etmek için ASCII kodunu kullanır. A'nın ASCII değeri 65, a ise 97'dir . B'nin ASCII değeri 66 ve b , 98'dir .Aksan hassasiyeti
A ve á , o ve ó aynı şekilde muamele edilirse, aksan duyarlı değildir. Bir bilgisayar a ve á'ya farklı davranır , çünkü girişi ayırt etmek için ASCII kodunu kullanır. A'nın ASCII değeri 97 ve á 225'tir . ASCII değeri o 111 ve 243 .Kana Hassasiyeti
Japonca kana karakterleri Hiragana ve Katakana farklı şekilde ele alındığında Kana'ya duyarlı denir.Genişlik hassasiyeti
Tek baytlık bir karakter (yarım genişlik) ve çift baytlık bir karakter (tam genişlik) olarak temsil edildiğinde aynı karakter farklı olarak ele alındığında genişliğe duyarlıdır.Veri tabanı, Tablolar ve farklı collationlı sütunlar
SQL Server 2000, kullanıcıların farklı harmanlamalarda veritabanları, tablolar ve sütunlar oluşturmasına olanak tanır.Farklı collation içeren veritabanları
1: use master
2: go
3: create database BIN collate Latin1_General_BIN
4: go
5: create database CI_AI_KS collate Latin1_General_CI_AI_KS
6: go
7: create database CS_AS_KS_WS collate Latin1_General_CS_AS_KS_WS
8: go
Tablolar ve farklı collationlı sütunlar
1: Create table Mytable (
2: [colu] char(10) COLLATE Albanian_CI_AI_KS_WS NULL,
3: [Maydate] [char] (8) COLLATE Korean_Wansung_Unicode_CS_AS_KS NOT NULL ,
4: [Risk_Rating] [char] (2) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
5: )
6: Com
Veritabanlarındaki karakterleri farklı collation ile karşılaştırma Aşağıdaki kodu CI_AI_KS ve CS_AS_KS_WS'de çalıştırdığımızda sonuçlar tamamen farklı olacaktır.
1: declare @Accentvar1 char(1)
2: declare @Accentvar2 char(1)
3: declare @Casevar1 char(1)
4: declare @Casevar2 char(1)
5: set @casevar1 ='A'
6: set @casevar2 ='a'
7: set @Accentvar1 ='a'
8: set @Accentvar2 ='á'
9: if @casevar1 = @casevar2
10: begin
11: print "A and a are treated same"
12: end
13: else
14: begin
15: print "A and a are not treated same"
16: end
17: if @Accentvar1 = @Accentvar2
18: begin
19: print "A and á are treated same"
20: end
21: else
22: begin
23: print "A and á are not treated same"
24: end
Bu ifadeleri CI_AI_KS veritabanında yürüttüğümüzde, sonuçlar aşağıda gösterilenlere benzer.
A ve a aynı muamele görür A ve á aynı muamele görür Bu ifadeleri CS_AS_KS_WS veritabanında yürüttüğümüzde, sonuçlar aşağıda gösterilenlere benzer. A ve a aynı muamele görmez A ve á aynı muamele görmez .
Büyük / küçük harf duyarlı bir veritabanında büyük / küçük harf duyarlılığını simüle etme Büyük / küçük harfe duyarlı olmayan bir veritabanında büyük / küçük harf duyarlılığını simüle etmek genellikle gereklidir. Aşağıdaki örnek, bunu nasıl başarabileceğinizi görebiliriz..
1: Use CI_AI_KS
2: go
3: declare @var1 varchar(10)
4: declare @var2 varchar(10)
5: set @var1 ='A'
6: set @var2 ='a'
7: if ASCII(@var1) = ASCII(@var2)
8: print "A and a are treated same"
9: else
10: print "A and a are not same"
Ancak, ASCII işlevi kelimeler için kullanılamaz. Büyük / küçük harfe duyarlılık simülasyonunun aynı işlevselliğini sağlamak için değişken veri türünü kullanabiliriz.
1: Use CI_AI_KS
2: go
3: declare @var1 varchar(10)
4: declare @var2 varchar(10)
5: set @var1 ='Good'
6: set @var2 ='gooD'
7: if cast(@var1 as varbinary) = cast(@var2 as varbinary)
8: print "Good and gooD are treated same"
9: else
10: print "Good and gooD are not treated same"