Bence belirtildiği gibi bir soru (2015-04-20, "Hangi harmanlama [...]") demek, kabul edilen cevabın harmanlamadan ziyade kodlamadan bahsettiği anlamına gelmediği anlamına gelmez. Belirtilen soruyu amaçlanandan çok cevaplayayım, çünkü ilginç olduğunu düşünüyorum :-)
Wikipedia “Harmanlama, yazılı bilgilerin standart bir düzende toplanmasıdır” diyor. Hesaplamada, harmanlama “böyle bir siparişin belirtilmesi” nin anlamını almıştır. Başka bir deyişle, bir harmanlama üç yönlü bir karşılaştırma işlevinin tanımıdır (veya ima eder).
Kısa cevap "kesinlikle belki" olduğunu düşünüyorum. En azından şu shenaniganların farkındayım:
#!/usr/bin/python
name = u"Jonas K\xf6lker" # \xf6 is o-umlaut
enc = name.encode('utf-8')
assert len(name) == 12 # \xf6 is one character
assert len(enc) == 13 # but two bytes in utf-8
import locale
locale.setlocale(locale.LC_COLLATE, "da_DK.utf8") # works on my machine
long_form = locale.strxfrm(enc)
assert len(long_form) == 38
locale.strxfrm
bir fonksiyonudur Returns a string that behaves for cmp locale-aware
olduğunu, başka bir dizgenin bir bayt-bayt standart lexicographic karşılaştırma yerel tarafından belirtildiği harmanlama fonksiyonuna göre dizeleri karşılaştırma aynı sonucu üretecektir benzer şekilde kodlanan bu şekilde bir dizi kodlar.
Bazı gözlemler: da_DK.utf8
dize ouüö
sıralanır. İçinde de_DE.utf8
, dize oöuü
sıralanır. Şuna len(long_form) == 38
ve 38> 13 olduğuna dikkat edin de_DE.utf8
.
Veritabanınızın bazı dize alanında bir dizini varsa da_DK.utf8
, buna göre harmanlanmışsa , basit bir karşılaştırma yapabilmek için dahili olarak bir şey yapıyor olabilirstrxfrm
. (Öte yandan, diskler yavaştır. Karakter başına karşılaştırma maliyetinin daha az sayıda karakterle karşılaştırılarak dengelenmekten daha fazla olması durumunda, daha kompakt bir gösterime dayalı olarak indekslenmesi daha hızlı olabilir.)
"Bir harmanlamanın, sorgu hızı üzerinde herhangi bir etkisi var mı?" da_DK.utf8
) ve Almanca ( de_DE.utf8
) yerel yerler daha zor bir şey yapıyor. Bu olacak bazı ben buna değer endişesi olmayacak şüpheli rağmen, sorgu hızı üzerindeki etkisini.
"Bir tablonun büyüklüğü harmanlamaya bağlı olarak değişiyor mu?" - Bir harmanlamaya göre bir indeksi ve başka bir harmana göre farklı bir indeksi veya bazı iki strxfrm
dönüşümden birini uygulayarak hayal edebilirim . Bu varsayımsal senaryoda, farklı boyut özelliklerine sahip iki harman varsa, cevabı evet.
"önerilen harmanlama hangisi olurdu?" - Bu neden dizeleri sıralamanız gerektiğine bağlı. O sahip olmak sadece buysa bazı dizeleri sipariş kanonik yolu, muhtemelen "C" ile gider. Kullanıcılara, insanın beklentilerine göre sıralama düzeninde veri sunmaksa ve bu beklentiler kültürleri tarafından şekillendiriliyorsa ve veritabanının (başka bir katmanın değil) sıralamayı yapmasını istiyorsanız, belki harmanlama başına bir dizin oluşturmalısınız. yani, en az bir da_DK.utf8
Danimarkalılara göre, diğeri de_DE.utf8
Almanlara göre. Bence bu oldukça hızlı bir şekilde oldukça büyüyebilir.
Bunların hepsi büyük ölçüde veritabanınızın iç işleyişine bağlıdır; Sanırım "standartlaştırılmış" (lol!) SQL'in ötesine geçiyor. Her zaman olduğu gibi, kendi veritabanı sisteminize ait belgelere bakın.