¿Cuáles son las diferencias entre utf8 general ci y utf8 unicode ci? [duplicar]
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 al diseñar una base de datos?
2 answers
utf8_general_ci
es una colación muy simple - y en Unicode, muy rota - que da resultados incorrectos en texto Unicode general. Lo que hace es:
- convierte a la normalización Unicode la forma D para la descomposición canónica
- elimina cualquier combinación de caracteres
- se convierte a mayúsculas
Esto no funciona correctamente en Unicode, porque no entiende la carcasa Unicode. Carcasa Unicode solo es mucho más complicado que un Enfoque ASCII-mente puede manejar. Por ejemplo:
- La minúscula de "" es "ß", pero la mayúscula de "ß" es "SS".
- Hay dos sigmas griegos en minúsculas, pero solo uno en mayúscula; considere "Σίσυφος".
- Las letras como "ø" no se descomponen en una "o" más un diacrítico, lo que significa que no se ordenará correctamente.
Hay muchas otras sutilezas.
-
utf8_unicode_ci
utiliza el estándar Intercalación Unicode Algoritmo, soporta las llamadas expansiones y ligaduras, por ejemplo: Letra alemana ß (U + 00DF LETRA SHARP S) se clasifica cerca de " ss" La letra Œ (U+0152 LATIN CAPITAL LIGATURE OE) se clasifica cerca de "OE".
utf8_general_ci
no soporta 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 ruso y búlgaro de cirílico. Letras adicionales usadas en bielorruso, Macedonio, Serbio y ucraniano no están bien ordenados.
El costo de utf8_unicode_ci
es que es un bit pequeño
más lento que utf8_general_ci
. Pero ese es el precio que pagas por la corrección. O puedes tener una respuesta rápida que está mal, o una respuesta un poco más lenta que es derecho. Tú eliges.
Es muy difícil justificar siempre dar respuestas incorrectas, así que es mejor asumir que utf8_general_ci
no existe y usar siempre utf8_unicode_ci
. Bueno, a menos que quieras respuestas equivocadas.
Fuente: http://forums.mysql.com/read.php?103,187048,188748#msg-188748
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-27 05:48:54
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 como expansiones; es decir, cuando un carácter se compara como igual a combinaciones de otros caracter. Por ejemplo, en alemán y otros idiomas "ß
" es igual a "ss
".utf8_unicode_ci
también soporta contracciones y caracteres ignorables.utf8_general_ci
es una compilación heredada que no admite expansiones, contracciones o caracteres ignorables. Solo puede hacer comparaciones uno a uno entre caracteres.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-06-24 04:55:51