utf8_general_ci
é um agrupamento muito simples — e em Unicode, muito quebrado — que fornece resultados incorretos em texto Unicode geral. O que ele faz é:- converte para a forma de normalização Unicode D para decomposição canônica
- remove qualquer combinação de caracteres
- converte para maiúsculas
Isso não funciona corretamente em Unicode, porque ele não entende o uso de maiúsculas e minúsculas Unicode. A caixa Unicode sozinha é muito mais complicada do que uma abordagem voltada para ASCII pode lidar. Por exemplo:
- A minúscula de “ẞ” é “ß”, mas a maiúscula de “ß” é “SS”.
- Existem dois sigmas gregos minúsculos, mas apenas um maiúsculo; considere “Σίσυφος”.
- Letras como "ø" não se decompõem em um "o" mais um diacrítico, o que significa que não serão classificadas corretamente.
Existem muitas outras sutilezas.
utf8_unicode_ci
usa o algoritmo de agrupamento Unicode padrão , suporta as chamadas expansões e ligaduras, por exemplo:A letra alemã ß (U+00DF LETTER SHARP S) é classificada perto de "ss"A letra Œ (U+0152 LATIN CAPITAL LIGATURE OE) é classificada perto de "OE".
utf8_general_ci
não suporta expansões/ligaduras, ele classifica todas essas letras como caracteres únicos e, às vezes, em uma ordem errada. utf8_unicode_ci
é geralmente mais preciso para todos os scripts. Por exemplo, no bloco cirílico:utf8_unicode_ci
é bom para todos estes idiomas:russo, búlgaro, bielorrusso, macedônio, sérvio e ucraniano. Enquanto utf8_general_ci é bom apenas para o subconjunto russo e búlgaro do cirílico. Letras extras usadas em bielorrusso, macedônio, sérvio e ucraniano não são bem classificadas.
O custo de
utf8_unicode_ci
é que é um pouco bits menor que utf8_general_ci
. Mas esse é o preço que você paga pela correção. Ou você pode ter uma resposta rápida que está errada, ou uma resposta um pouco mais lenta que está certa. Sua escolha. É muito difícil justificar dar respostas erradas, então é melhor supor que utf8_general_ci
não existe e usar sempre utf8_unicode_ci
. Bem, a menos que você queira respostas erradas. Fonte:http://forums.mysql.com/read .php?103,187048,188748#msg-188748