utf8_general_ci - utf8_unicode_ci mysql
¿Cuáles son las diferencias entre utf8_general_ci y utf8_unicode_ci? (2)
De conjuntos de caracteres Unicode en la documentación de MySQL :
Para cualquier conjunto de caracteres Unicode, las operaciones realizadas usando la intercalación
_general_ci
son más rápidas que las de la intercalación_unicode_ci
. Por ejemplo, las comparaciones para la intercalaciónutf8_general_ci
son más rápidas, pero ligeramente menos correctas, que las comparaciones parautf8_unicode_ci
. La razón de esto es queutf8_unicode_ci
admite asignaciones tales como expansiones; es decir, cuando un personaje se compara como igual a las combinaciones de otros personajes. Por ejemplo, en alemán y en otros idiomas, "ß
" es igual a "ss
".utf8_unicode_ci
también admite contracciones y caracteres ignorables.utf8_general_ci
es una clasificación heredada que no admite expansiones, contracciones o caracteres ignorables. Solo puede hacer comparaciones uno a uno entre los personajes.
Posible duplicado:
Cuál es la diferencia entre utf8_general_ci y utf8_unicode_ci
Tengo dos opciones para unicode que parecen prometedoras para una base de datos mysql.
utf8_general_ci unicode (multilingual), case-insensitive
utf8_unicode_ci unicode (multilingual), case-insensitive
¿Puede explicar cuál es la diferencia entre utf8_general_ci y utf8_unicode_ci? ¿Cuáles son los efectos de elegir uno sobre el otro cuando se diseña una base de datos?
utf8_general_ci
es una utf8_general_ci
muy simple, y en Unicode, muy fragmentada, que da resultados incorrectos en el texto general de Unicode. Lo que hace es:
- convierte a formato de normalización Unicode D para la descomposición canónica
- elimina cualquier combinación de caracteres
- convierte a mayúsculas
Esto no funciona correctamente en Unicode, porque no comprende la carcasa Unicode. La carcasa Unicode por sí sola es mucho más complicada de lo que puede manejar un enfoque ASCII. Por ejemplo:
- La letra minúscula de "ẞ" es "ß", pero la mayúscula de "ß" es "SS".
- Hay dos sigmas griegas minúsculas, pero solo una mayúscula; considerar "Σίσυφος".
- Las letras como "ø" no se descomponen en "o" más un signo diacrítico, lo que significa que no se ordenarán correctamente.
Hay muchas otras sutilezas.
-
utf8_unicode_ci
usa el Algoritmo deutf8_unicode_ci
Unicode estándar, admite las llamadas expansiones y ligaduras, por ejemplo: La letra alemana ß (U + 00DF LETRA SHARP S) está ordenada cerca de "ss" La letra Œ (U + 0152 LITERATURA CAPITAL LATÍN OE) está ordenada cerca " OE ".
utf8_general_ci
no es compatible con expansiones / ligaduras, ordena todas estas letras como caracteres individuales y, a veces, en un orden incorrecto.
-
utf8_unicode_ci
es generalmente más preciso para todos los scripts. Por ejemplo, en el bloque cirílico:utf8_unicode_ci
está bien para todos estos idiomas: ruso, búlgaro, bielorruso, macedonio, serbio y ucraniano. Mientras que utf8_general_ci está bien solo para el subconjunto de cirílico ruso y búlgaro. Las letras adicionales utilizadas en bielorruso, macedonio, serbio y ucraniano no se clasifican correctamente.
El costo de utf8_unicode_ci
es que es un poco más lento que utf8_general_ci
. Pero ese es el precio que paga por la corrección. O bien puede tener una respuesta rápida que está mal, o una respuesta muy leve que es correcta. Tu elección. Es muy difícil justificar dar respuestas incorrectas, por lo que es mejor suponer que utf8_general_ci
no existe y usar siempre utf8_unicode_ci
. Bueno, a menos que quieras respuestas incorrectas.
Fuente: http://forums.mysql.com/read.php?103,187048,188748#msg-188748