utf8_general_ci
è un confronto molto semplice e, su Unicode, molto frammentato, che dà risultati errati sul testo Unicode generale. Quello che fa è:
- converte in formato D di normalizzazione Unicode per la scomposizione canonica
- rimuove tutti i caratteri combinati
- converte in maiuscolo
Questo non funziona correttamente su Unicode, perché non comprende il case Unicode. Il solo case Unicode è molto più complicato di quanto possa gestire un approccio orientato all'ASCII. Ad esempio:
- Il minuscolo di "ẞ" è "ß", ma il maiuscolo di "ß" è "SS".
- Ci sono due sigma greci minuscoli, ma solo uno maiuscolo; considera “Σίσυφος”.
- Lettere come "ø" non si decompongono in una "o" più un segno diacritico, il che significa che non verranno ordinate correttamente.
Ci sono molte altre sottigliezze.
utf8_unicode_ci
utilizza lo standard Algoritmo di confronto Unicode , supporta le cosiddette espansioni e legature, ad esempio:la lettera tedesca ß (U+00DF LETTER SHARP S) è ordinata vicino a "ss" La lettera Œ (U+0152 LATIN CAPITAL LIGATURE OE) è ordinata vicino a "OE".
utf8_general_ci
non supporta espansioni/legature, ordina tutte queste lettere come singoli caratteri e talvolta in un ordine errato.
utf8_unicode_ci
è generalmente più accurato per tutti gli script. Ad esempio, sul blocco cirillico:utf8_unicode_ci
va bene per tutte queste lingue:russo, bulgaro, bielorusso, macedone, serbo e ucraino. Mentre utf8_general_ci va bene solo per il sottoinsieme russo e bulgaro del cirillico. Le lettere extra usate in bielorusso, macedone, serbo e ucraino non sono ordinate bene.
Il costo di utf8_unicode_ci
è che è un poco bit più lento di utf8_general_ci
. Ma questo è il prezzo da pagare per la correttezza. O puoi avere una risposta veloce che è sbagliata, o una risposta leggermente più lenta che è giusta. La tua scelta. È molto difficile giustificare mai dare risposte sbagliate, quindi è meglio presumere che utf8_general_ci
non esiste e utilizzare sempre utf8_unicode_ci
. Bene, a meno che tu non voglia risposte sbagliate.
Fonte:http://forums.mysql.com/read .php?103,187048,188748#msg-188748