Bu soru veritabanlarıyla çok ilgili değil, daha çok Unicode kullanımı ve kuralları ile ilgilidir.
Dayanarak https://docs.microsoft.com/en-us/sql/t-sql/statements/windows-collation-name-transact-sql Latin1_General_100_CS_AS araçlarla: "Harmanlama kod sayfasına kural ve haritalar sıralama Latince1 Genel sözlüğünü kullanır 1252 "eklenmiştir CS = Büyük / Küçük Harfe Duyarlı ve AS = Accent Hassas.
Windows kod sayfası 1252 ile Unicode ( http://www.unicode.org/Public/MAPPINGS/VENDORS/MICSFT/WINDOWS/CP1252.TXT ) arasındaki eşleme , uğraştığımız tüm karakterler için aynı değerleri gösterir (macron ile e hariç) Microsoft eşlemesinde mevcut olmayan, bu durumda ne yaptığına dair hiçbir fikrim yok), bu yüzden şimdilik Unicode araçlarına ve terminolojisine konsantre olabiliriz.
İlk olarak, tüm dizeleriniz için neyle uğraştığımızı bize bildirin:
0065 LATIN SMALL LETTER E
0041 LATIN CAPITAL LETTER A
00E9 LATIN SMALL LETTER E WITH ACUTE
0042 LATIN CAPITAL LETTER B
00EB LATIN SMALL LETTER E WITH DIAERESIS
0043 LATIN CAPITAL LETTER C
00E8 LATIN SMALL LETTER E WITH GRAVE
0044 LATIN CAPITAL LETTER D
00EA LATIN SMALL LETTER E WITH CIRCUMFLEX
0045 LATIN CAPITAL LETTER E
0113 LATIN SMALL LETTER E WITH MACRON
0046 LATIN CAPITAL LETTER F
Unicode Harmanlama Algoritması burada açıklanmıştır: https://www.unicode.org/reports/tr10/
Bazı kurallar içeriğe duyarlı olduğundan, sıralamanın birbiri ardına yalnızca bir karaktere bağlı olamayacağını açıklayan bölüm 1.3 "Bağlamsal Duyarlılık" konusuna bakın.
1.8'deki şu noktalara da dikkat edin:
Harmanlama, dizelerin bir özelliği değildir. Harmanlama sırası genel olarak birleştirme veya alt dize işlemleri altında korunmaz.
Varsayılan olarak, algoritma üç tamamen özelleştirilebilir seviyeden yararlanır. Latin alfabesi için bu seviyeler kabaca şöyledir:
alphabetic ordering
diacritic ordering
case ordering.
Ancak algoritma kendi başına biraz yoğundur. Bunun özü şöyledir: Kısaca belirtildiği gibi, Unicode Harmanlama Algoritması, karakterler için eşleme verileri içeren bir giriş Unicode dizesi ve bir Harmanlama Öğesi Tablosu alır. İşaretsiz bir 16 bit tam sayı dizisi olan bir sıralama anahtarı üretir. Bu şekilde üretilen iki veya daha fazla sıralama anahtarı, üretildikleri dizeler arasında doğru karşılaştırmayı sağlamak için ikili olarak karşılaştırılabilir.
Belirli Latin sıralama kurallarını burada görebilirsiniz: http://developer.mimer.com/collations/charts/latin.htm
veya daha fazlası doğrudan ve özellikle MS SQL için:
http://collation-charts.org/mssql/mssql. 0409.1252.Latin1_General_CS_AS.html
İçin e
karakter o gösterileri:
e E é É è È ê Ê ë Ë
Bu, sipariş verirken sonuçlarınızı açıklar, col1
kod sayfası 1252'de ē bulunmadığı için, bununla ne yaptığına dair hiçbir fikrim yok.
Veya Unicode algoritmasını el ile yaparsak, http://www.unicode.org/Public/UCA/latest/allkeys.txt adresindeki DUCET'in anahtar değerini kullanarak :
adım 1: Normalleştirme formu D, böylece her durum şöyle olur:
e => U+0065
é => U+0065 U+0301
ë => U+0065 U+0308
è => U+0065 U+0300
ê => U+0065 U+0302
ē => U+0065 U+0304
2. adım, Harmanlama dizileri üretme (dosyada arama allkeys.txt
)
e => [.1D10.0020.0002]
é => [.1D10.0020.0002] [.0000.0024.0002]
ë => [.1D10.0020.0002] [.0000.002B.0002]
è => [.1D10.0020.0002] [.0000.0025.0002]
ê => [.1D10.0020.0002] [.0000.0027.0002]
ē => [.1D10.0020.0002] [.0000.0032.0002]
adım 3, Form sıralama tuşları (her seviye için, her bir harmanlama dizisi içindeki her değeri alın, ardından 0000'ı sınırlayıcı olarak koyun ve bir sonraki seviye için tekrar başlayın)
e => 1D10 0000 0020 0000 0002
é => 1D10 0000 0020 0024 0000 0002 0002
ë => 1D10 0000 0020 002B 0000 0002 0002
è => 1D10 0000 0020 0025 0000 0002 0002
ê => 1D10 0000 0020 0027 0000 0002 0002
ē => 1D10 0000 0020 0032 0000 0002 0002
4. adım, Sıralama tuşlarını karşılaştırın (her bir değerin birer birer basit ikili karşılaştırması): Dördüncü değer, hepsini sıralamak için yeterlidir, böylece son sipariş şu şekilde olur:
e
é
è
ê
ë
ē
Aynı şekilde sipariş vermek için col2
:
1. adım: NFD
eA => U+0065 U+0041
éB => U+0065 U+0301 U+0042
ëC => U+0065 U+0308 U+0043
èD => U+0065 U+0300 U+0044
êE => U+0065 U+0302 U+0045
ēF => U+0065 U+0304 U+0046
2. adım: Harmanlama dizileri
eA => [.1D10.0020.0002] [.1CAD.0020.0008]
éB => [.1D10.0020.0002] [.0000.0024.0002] [.1CC6.0020.0008]
ëC => [.1D10.0020.0002] [.0000.002B.0002] [.1CE0.0020.0008]
èD => [.1D10.0020.0002] [.0000.0025.0002] [.1CF5.0020.0008]
êE => [.1D10.0020.0002] [.0000.0027.0002] [.1D10.0020.0008]
ēF => [.1D10.0020.0002] [.0000.0032.0002] [.1D4B.0020.0008]
3. adım: Form sıralama tuşları
eA => 1D10 1CAD 0000 0020 0020 0000 0002 0008
éB => 1D10 1CC6 0000 0020 0024 0020 0000 0002 0002 0008
ëC => 1D10 1CE0 0000 0020 002B 0020 0000 0002 0002 0008
èD => 1D10 1CF5 0000 0020 0025 0020 0000 0002 0002 0008
êE => 1D10 1D10 0000 0020 0027 0020 0000 0002 0002 0008
ēF => 1D10 1D4B 0000 0020 0032 0020 0000 0002 0002 0008
Adım 4: Sıralama tuşlarını karşılaştırın: İkinci değer hepsini sıralamak için yeterlidir ve aslında zaten artan sıradadır, bu yüzden son sipariş gerçekten:
eA
éB
ëC
èD
êE
ēF
Güncelleme : Yeni kurallar sağlayan alan nedeniyle daha zor olan Solomon Rutzky üçüncü vakasını ekleyerek ("göz ardı edilemez vaka" yı seçtim):
adım 1, NFD:
è 1 => U+0065 U+0300 U+0020 U+0031
ê 5 => U+0065 U+0302 U+0020 U+0035
e 2 => U+0065 U+0020 U+0032
é 4 => U+0065 U+0301 U+0020 U+0034
ē 3 => U+0065 U+0304 U+0020 U+0033
ë 6 => U+0065 U+0308 U+0020 U+0036
Adım 2, Harmanlama dizileri üretin:
è 1 => [.1D10.0020.0002] [.0000.0025.0002] [*0209.0020.0002] [.1CA4.0020.0002]
ê 5 => [.1D10.0020.0002] [.0000.0027.0002] [*0209.0020.0002] [.1CA8.0020.0002]
e 2 => [.1D10.0020.0002] [*0209.0020.0002] [.1CA5.0020.0002]
é 4 => [.1D10.0020.0002] [.0000.0024.0002] [*0209.0020.0002] [.1CA7.0020.0002]
ē 3 => [.1D10.0020.0002] [.0000.0032.0002] [*0209.0020.0002] [.1CA6.0020.0002]
ë 6 => [.1D10.0020.0002] [.0000.002B.0002] [*0209.0020.0002] [.1CA9.0020.0002]
3. adım, Form sıralama tuşları:
è 1 => 1D10 0209 1CA4 0000 0020 0025 0020 0020 0000 0002 0002 0002 0002
ê 5 => 1D10 0209 1CA8 0000 0020 0027 0020 0020 0000 0002 0002 0002 0002
e 2 => 1D10 0209 1CA5 0000 0020 0020 0020 0000 0002 0002 0002
é 4 => 1D10 0209 1CA7 0000 0020 0024 0020 0020 0000 0002 0002 0002 0002
ē 3 => 1D10 0209 1CA6 0000 0020 0032 0020 0020 0000 0002 0002 0002 0002
ë 6 => 1D10 0209 1CA9 0000 0020 002B 0020 0020 0000 0002 0002 0002 0002
4. adım, Sıralama tuşlarını karşılaştırın:
Temel olarak üçüncü değer siparişi belirler ve aslında sadece son basamağa dayanır, bu nedenle sipariş şöyle olmalıdır:
è 1
e 2
ē 3
é 4
ê 5
ë 6
İkinci güncelleme Solomon Rutzky'nin Unicode sürümleri hakkındaki yorumuna dayanıyor.
allkeys.txt
Şu anda en son Unicode sürümü hakkındaki verileri kullandım , yani 10.0 sürümü
Bunun yerine Unicode 5.1'i hesaba katmamız gerekirse , bu şöyle olur:
http://www.unicode.org/Public/UCA/5.1.0/allkeys.txt
Ben sadece yukarıdaki tüm karakterler için, harmanlama dizileri bunun yerine kontrol ettim:
e => [.119D.0020.0002.0065]
é => [.119D.0020.0002.0065] [.0000.0032.0002.0301]
ë => [.119D.0020.0002.0065] [.0000.0047.0002.0308]
è => [.119D.0020.0002.0065] [.0000.0035.0002.0300]
ê => [.119D.0020.0002.0065] [.0000.003C.0002.0302]
ē => [.119D.0020.0002.0065] [.0000.005B.0002.0304]
ve:
eA => [.119D.0020.0002.0065] [.1141.0020.0008.0041]
éB => [.119D.0020.0002.0065] [.0000.0032.0002.0301] [.1157.0020.0008.0042]
ëC => [.119D.0020.0002.0065] [.0000.0047.0002.0308] [.116F.0020.0008.0043]
èD => [.119D.0020.0002.0065] [.0000.0035.0002.0300] [.1182.0020.0008.0044]
êE => [.119D.0020.0002.0065] [.0000.003C.0002.0302] [.119D.0020.0008.0045]
ēF => [.119D.0020.0002.0065] [.0000.005B.0002.0304] [.11D5.0020.0008.0046]
ve:
è 1 => [.119D.0020.0002.0065] [.0000.0035.0002.0300] [*0209.0020.0002.0020] [.1138.0020.0002.0031]
ê 5 => [.119D.0020.0002.0065] [.0000.003C.0002.0302] [*0209.0020.0002.0020] [.113C.0020.0002.0035]
e 2 => [.119D.0020.0002.0065] [*0209.0020.0002.0020] [.1139.0020.0002.0032]
é 4 => [.119D.0020.0002.0065] [.0000.0032.0002.0301] [*0209.0020.0002.0020] [.113B.0020.0002.0034]
ē 3 => [.119D.0020.0002.0065] [.0000.005B.0002.0304] [*0209.0020.0002.0020] [.113A.0020.0002.0033]
ë 6 => [.119D.0020.0002.0065] [.0000.0047.0002.0308] [*0209.0020.0002.0020] [.113D.0020.0002.0036]
daha sonra aşağıdaki sıralama tuşlarını hesaplar:
e => 119D 0000 0020 0000 0002 0000 0065
é => 119D 0000 0020 0032 0000 0002 0002 0000 0065 0301
ë => 119D 0000 0020 0047 0000 0002 0002 0000 0065 0308
è => 119D 0000 0020 0035 0000 0002 0002 0000 0065 0300
ê => 119D 0000 0020 003C 0000 0002 0002 0000 0065 0302
ē => 119D 0000 0020 005B 0000 0002 0002 0000 0065 0304
ve:
eA => 119D 1141 0000 0020 0020 0000 0002 0008 0000 0065 0041
éB => 119D 1157 0000 0020 0032 0020 0000 0002 0002 0008 0000 0065 0301 0042
ëC => 119D 116F 0000 0020 0047 0020 0000 0002 0002 0008 0000 0065 0308 0043
èD => 119D 1182 0000 0020 0035 0020 0000 0002 0002 0008 0000 0065 0300 0044
êE => 119D 119D 0000 0020 003C 0020 0000 0002 0002 0008 0000 0065 0302 0045
ēF => 119D 11D5 0000 0020 005B 0020 0000 0002 0002 0008 0000 0065 0304 0046
ve:
è 1 => 119D 0209 1138 0000 0020 0035 0020 0020 0000 0002 0002 0002 0002 0000 0065 0300 0020 0031
ê 5 => 119D 0209 113C 0000 0020 003C 0020 0020 0000 0002 0002 0002 0002 0000 0065 0302 0020 0035
e 2 => 119D 0209 1139 0000 0020 0020 0020 0000 0002 0002 0002 0000 0065 0020 0032
é 4 => 119D 0209 113B 0000 0020 0032 0020 0020 0000 0002 0002 0002 0002 0000 0065 0301 0020 0034
ē 3 => 119D 0209 113A 0000 0020 005B 0020 0020 0000 0002 0002 0002 0002 0000 0065 0304 0020 0033
ë 6 => 119D 0209 113D 0000 0020 0047 0020 0020 0000 0002 0002 0002 0002 0000 0065 0308 0020 0036
bu da yine bu üç sıralı sonucu verir:
e
é
è
ê
ë
ē
ve
eA
éB
ëC
èD
êE
ēF
ve
è 1
e 2
ē 3
é 4
ê 5
ë 6
VARCHAR
. Burada kullanılmayan (yani Unicode olmayan) veriler içindir. Bu yüzdenē
karakter gayet iyi çalışıyor. 2) "harmanlama çizelgeleri" bilgisi biraz modası geçmiş. Bu Harmanlamanın önceki bir sürümü içindir ve 2009'dan beri hiçbir şey yayınlamamıştır. 3) Buradaki Unicode sürümü kesinlikle en son sürüm değildir (Sürüm 10)._100_
Bu Unicode 5.0 veya 5.1 olacağını bu yüzden serisi Harmanlamalar, SQL 2008 ile birlikte gelen unicode.org/standard/versions/#TUS_Earlier_Versions