Almanca dilinde bir web sitesi yapıyorum, Bu yüzden ä, ü, ß
vb. Gibi karakterler kullanıyorum, Önerileriniz nelerdir?Alman dili için en iyi MySQL harmanlama nedir?
cevap
karakter kümesi gibi:
farkı bilmek.Harmanlamada - bu, özel karakterleri olan diller için biraz kötü. Çeşitli türlerde harmanlamalar vardır. Yapabilirler onlar karşılaştırmalarda Sesli harfler nasıl ele tüm karakterler ve diğer karakterler, ancak farklılık tüm mağaza, yani
u = ü
doğru veya yanlış olup olmadığı; ve sıralamada (Alfabelerde, Umlautlar sıralama düzeninde bulunur).
uzun lafın kısası, en iyi bahis O durumda duyarsız arama sağlar yautf8_unicode_ci
olduğu; ß
'u ss
olarak ele alır ve DIN-1 sınıflandırmasını kullanır. Ne yazık ki, tüm ikili olmayan Unicode harmanlamaları gibi, "Muller" araması da "Müller" i geri döndüreceği için korkunç bir sıkıntı olan u = ü
'u ele alır. Gerçek zamanlı olarak Umlaut farkında bir harmanlamayı ayarlayarak bu konuda çalışmak zorunda kalacaksınız.
veya utf8_bin
Bu harmanlama duyarlı aramalar mümkündür u = ü
sorunu ancak durum yoktur.
İkili harmanlamayı kullanmanın başka bir yan etkisi olup olmadığından emin değilim; Bu konuda bir soru sordum here.
This mySQL manual page çeşitli alfabe ve gündelik kullanımda getirmek sonuçları üzerinde iyi bir genel bakış sağlar.
Here, mySQL'de bulunan genel yazışmalara genel bakış niteliğindedir.
utf-8-general-ci
veya utf-8-unicode-ci
. Mümkünse kesinlikle UTF-8, UTF-8: General? Bin? Unicode?
Sanırım "utf8_general_ci" veya "utf8_unicode_ci" demek istiyorsunuz. –
desteklemek için tam UTF-8 standart Eğer charset utf8mb4
ve MySQL harmanlama utf8mb4_unicode_ci
kullanmak zorunda!
Not: MySQL, yalnızca utf8
karakter kümesini kullanırken 1- ila 3 baytlık karakterleri destekler! Bu yüzden modern Emojiler 4 Byte kullandıklarından desteklenmiyor!
UTF-8'i tam standardını destekleyen tek yolu TÜM tablolar charset ve harmanlama değiştirip utf8mb4
ve utf8mb4_unicode_ci
için veritabanının kendisinin etmektir. Dahası, numaralı veri tabanının da utf8mb4'ü kullanması gerekiyor.
mysql sunucusu aşağıdaki SQL deyimi kullanarak utf8mb4 geçirilebilir elle /etc/mysql/conf.d/mysql.cnf
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
# character-set-client-handshake = FALSE ## better not set this!
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
Mevcut tablolarda yapılandırılabilir varsayılan charset utf8mb4 kullanmalıdır :
ALTER TABLE <table-name> CONVERT TO
CHARACTER SET utf8mb4
COLLATE utf8mb4_unicode_ci;
Not:
- herhangi masa colums olmayacak arasında BİRLEŞTİRMELER emin olmak için charset-encodings tarafından yavaşlatılmış TÜM tabloların değişmesi gerekiyor! bir dizin uzunluğu MySQL sınırlı olduğu gibi
- , göstergesi satır başına karakter sayısı 4 bayt ile çarpılır ve innodb_large_prefix yapılandırma seçenek ise daha küçük 3072
bu komutu, veritabanının charset ve varsayılan harmanlama değiştirmek çalıştırın.olması gerekir olmalıdır etkinse, DYNAMIC ve COMPRESSED satır biçimlerini kullanan InnoDB tabloları için bu uzunluk sınırı 3072 bayta yükseltilir. utf8mb4 utf8 ile tam geriye uyumlu olduğundan
ALTER DATABASE CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
, hiçbir mojibake veya veri kaybı diğer formları gerçekleşmelidir:
Bunun çok eski olduğunu biliyorum, ama ... Yukarıdakilere benzer bir utf8 harmanlamayı uygulamaya çalışıyorum. Ancak, utf8_unicode_ci kullanırken 'é' karakteri '?' Olarak kodlanır. Bunun neden olduğu hakkında bir fikrin var mı? Her karakterin bir temsili olduğunu düşündüm. – wright8191
@Pekka, utf8' kusurlu olduğundan (gerçek unicode değil), neden 'utf8mb4' üzerinden tavsiye edersiniz? – Pacerier