utf8_general_ci
è molto semplice - e su Unicode, molto rotto - collazione, uno che dà risultati non corretti sul testo generale Unicode. Ciò che fa è:
- converte in Unicode forma normalizzazione D per la decomposizione canonica
- rimuove tutti i caratteri che conciliano
- converte in maiuscolo
Questo non funziona correttamente su Unicode, perché non capisce l'involucro Unicode. L'involucro Unicode da solo è molto più complicato di un approccio di tipo ASCII in grado di gestire. Ad esempio:
- Il carattere minuscolo di "ẞ" è "ß", ma il maiuscolo "ß" è "SS".
- Ci sono due sigma greco minuscolo, ma solo uno maiuscolo; considera "Σίσυφος".
- Lettere come "ø" non si decompongono in una "o" più un segno diacritico, ovvero non verranno ordinate correttamente.
Ci sono molte altre sottigliezze.
utf8_unicode_ci
utilizza lo standard Unicode Collation Algorithm, supporta i cosiddetti espansioni e legature, per esempio: lettera SS tedesche (U + 00DF LETTERA SHARP S) vengono ordinati nei pressi di "ss" Lettera Œ (U + 0152 LATIN CAPITAL LEGATURE OE) è ordinato vicino a "OE".
utf8_general_ci
non supporta espansioni/legature, che smista tutte queste lettere come singoli caratteri, e, talvolta, in un ordine sbagliato.
utf8_unicode_ci
è generalmente più accurata per tutti gli script. Ad esempio, nel 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 supplementari utilizzate in bielorusso, macedone, serbo e ucraino non sono state selezionate correttamente.
Il costo di utf8_unicode_ci
è che è un po po 'più lento di utf8_general_ci
. Ma questo è il prezzo che si paga per la correttezza. O si può avere una risposta veloce che è sbagliata o una risposta leggermente più lenta che è giusta. La tua scelta. È molto difficile giustificare mai dare risposte errate, quindi è meglio supporre 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
Vedi anche http://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci – unor