mysql - utf8 - ¿Qué significa exactamente el conjunto de caracteres y la intercalación?
mysql create database utf8 (4)
Puedo leer la documentación de MySQL y está bastante claro. Pero, ¿cómo se decide qué conjunto de caracteres usar? ¿En qué datos tiene efecto la colación?
Estoy pidiendo una explicación de los dos y cómo elegirlos.
De los docs MySQL:
Un conjunto de caracteres es un conjunto de símbolos y codificaciones. Una intercalación es un conjunto de reglas para comparar caracteres en un conjunto de caracteres. Vamos a aclarar la distinción con un ejemplo de un conjunto de caracteres imaginarios.
Supongamos que tenemos un alfabeto con cuatro letras: ''A'', ''B'', ''a'', ''b''. Damos un número a cada letra: ''A'' = 0, ''B'' = 1, ''a'' = 2, ''b'' = 3. La letra ''A'' es un símbolo, el número 0 es la codificación de ''A'' , y la combinación de las cuatro letras y sus codificaciones es un conjunto de caracteres.
Ahora, supongamos que queremos comparar dos valores de cadena, ''A'' y ''B''. La forma más sencilla de hacer esto es mirar las codificaciones: 0 para ''A'' y 1 para ''B''. Como 0 es menor que 1, decimos que ''A'' es menor que ''B''. Ahora, lo que acabamos de hacer es aplicar una colación a nuestro conjunto de caracteres. La intercalación es un conjunto de reglas (solo una regla en este caso): "comparar las codificaciones". A esto, lo más simple de todas las posibles colaciones, se le llama binario.
Pero, ¿qué pasa si queremos decir que las letras minúsculas y mayúsculas son equivalentes? Entonces tendríamos al menos dos reglas: (1) tratar las letras minúsculas ''a'' y ''b'' como equivalentes a ''A'' y ''B''; (2) luego compara las codificaciones. A esto le llamamos una colación insensible a mayúsculas y minúsculas. Es un poco más complejo que una compilación binaria.
En la vida real, la mayoría de los conjuntos de caracteres tienen muchos caracteres: no solo ''A'' y ''B'', sino alfabetos completos, a veces múltiples alfabetos o sistemas de escritura oriental con miles de caracteres, junto con muchos símbolos especiales y signos de puntuación. También en la vida real, la mayoría de las intercalaciones tienen muchas reglas: no solo la insensibilidad a los casos, sino también la insensibilidad al acento (un "acento" es una marca adjunta a un carácter como en el ö ''alemán) y asignaciones de múltiples caracteres (como la regla de que'' ö ''='' OE ''en una de las dos colaciones alemanas).
Sugiero utilizar utf8mb4_unicode_ci
, que se basa en el estándar de clasificación y comparación de Unicode, que clasifica con precisión en una amplia gama de idiomas.
Un conjunto de caracteres es un subconjunto de todos los glifos escritos. Una codificación de caracteres especifica cómo esos caracteres se asignan a valores numéricos. Algunas codificaciones de caracteres, como UTF-8 y UTF-16, pueden codificar cualquier carácter en el conjunto de caracteres universal. Otros, como US-ASCII o ISO-8859-1 solo pueden codificar un subconjunto pequeño, ya que utilizan 7 y 8 bits por carácter, respectivamente. Debido a que muchos estándares especifican tanto un conjunto de caracteres como una codificación de caracteres, el término "conjunto de caracteres" a menudo se sustituye libremente por "codificación de caracteres".
Una recopilación comprende reglas que especifican cómo se pueden comparar los caracteres para la clasificación. Las reglas de colación pueden ser específicas de la localidad: el orden correcto de dos caracteres varía de un idioma a otro.
La elección de un conjunto de caracteres y la colación se reduce a si su aplicación está internacionalizada o no. Si no es así, ¿a qué locale te diriges?
Para elegir qué conjunto de caracteres desea admitir, debe considerar su aplicación. Si está almacenando la entrada suministrada por el usuario, puede ser difícil prever todos los lugares en los que finalmente se usará su software. Para admitirlos a todos, podría ser mejor admitir UCS (Unicode) desde el principio. Sin embargo, hay un costo para esto; muchos caracteres de Europa occidental ahora requerirán dos bytes de almacenamiento por carácter en lugar de uno.
Elegir la intercalación correcta puede ayudar al rendimiento si su base de datos usa la intercalación para crear un índice, y luego usa ese índice para proporcionar resultados ordenados. Sin embargo, dado que las reglas de intercalación son a menudo específicas de la localidad, ese índice no tendrá ningún valor si necesita ordenar los resultados de acuerdo con las reglas de otra configuración regional.
Una codificación de caracteres es una forma de codificar caracteres para que quepan en la memoria. Es decir, si el conjunto de caracteres es ISO-8859-15, el símbolo del euro, €, se codificará como 0xa4, y en UTF-8, será 0xe282ac.
La collation es cómo comparar caracteres, en latin9, hay letras como e é è ê f
, si están ordenadas por su representación binaria, irán ef é ê è
pero si la intercalación se establece en, por ejemplo, francés, usted '' Los tendré en el orden en el que pensaron que serían, lo que significa que todos los e é è ê
son iguales, y luego f
.