2011-04-02 5 views

cevap

21

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 ya

utf8_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.

+0

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

+0

@Pekka, utf8' kusurlu olduğundan (gerçek unicode değil), neden 'utf8mb4' üzerinden tavsiye edersiniz? – Pacerier

3

utf-8-general-ci veya utf-8-unicode-ci. Mümkünse kesinlikle UTF-8, UTF-8: General? Bin? Unicode?

+3

Sanırım "utf8_general_ci" veya "utf8_unicode_ci" demek istiyorsunuz. –

2

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

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:

bu komutu, veritabanının charset ve varsayılan harmanlama değiştirmek çalıştırın.