¿Qué significan exactamente el conjunto de caracteres y la clasificación?
-
19-08-2019 - |
Pregunta
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 recopilación?
Estoy pidiendo una explicación de los dos y cómo elegirlos.
Solución
De MySQL docs :
Un juego de caracteres es un conjunto de símbolos y codificaciones. Una colación es un conjunto de reglas para comparar personajes en un conjunto de caracteres. Hagamos el distinción clara con un ejemplo de un conjunto de caracteres imaginario.
Supongamos que tenemos un alfabeto con cuatro letras: 'A', 'B', 'a', 'b'. Nosotros asigne a cada letra un número: 'A' = 0, 'B' = 1, 'a' = 2, 'b' = 3. La letra 'A' es un símbolo, el número 0 es el codificación para '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'. los La forma más sencilla de hacer esto es mirar las codificaciones: 0 para 'A' y 1 para 'SEGUNDO'. Porque 0 es menor que 1, decimos 'A' es menor que 'B'. Ahora lo que hemos recién hecho es aplicar una colación a nuestro conjunto de caracteres. La colación es un conjunto de reglas (solo una regla en este caso): " compara las codificaciones " A esto le llamamos la más simple de todas las colaciones posibles colación binaria.
Pero, ¿y si queremos decir que el las letras minúsculas y mayúsculas son ¿equivalente? Entonces tendríamos a las menos dos reglas: (1) tratar el letras minúsculas 'a' y 'b' como equivalente a 'A' y 'B'; (2) entonces compara las codificaciones. A esto le llamamos colación insensible a mayúsculas y minúsculas. Es un poco más complejo que un binario colación.
En la vida real, la mayoría de los juegos de caracteres tienen muchos caracteres: no solo 'A' y 'B' pero alfabetos enteros, a veces múltiples alfabetos o escritura oriental sistemas 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 colaciones tienen muchas reglas: no solo insensibilidad al caso pero también insensibilidad de acento (un `` acento '' es un marca adjunta a un personaje como en Alemán '& # 246;') y varios caracteres asignaciones (como la regla que '& # 246;' = 'OE' en uno de los dos alemanes colaciones).
Otros consejos
Una codificación de caracteres es una forma de codificar caracteres para que quepan en la memoria. Es decir, si el juego de caracteres es ISO-8859-15, el símbolo del euro, & # 8364 ;, se codificará como 0xa4, y en UTF-8, será 0xe282ac.
La colación es cómo comparar caracteres, en latin9, hay letras como e f & # 233; & # 234; & # 232;
pero si la intercalación se establece, por ejemplo, en francés, los tendrá en el orden que pensó que sería, que es todo e & # 233; & # 232; & # 234;
son iguales, y luego f
.
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 pequeño subconjunto, ya que usan 7 y 8 bits por carácter, respectivamente. Debido a que muchos estándares especifican tanto un juego de caracteres como una codificación de caracteres, el término "juego de caracteres" a menudo se sustituye libremente por "codificación de caracteres".
Una clasificación comprende reglas que especifican cómo se pueden comparar los caracteres para ordenarlos. Las reglas de intercalación pueden ser específicas de la localidad: el orden correcto de dos caracteres varía de un idioma a otro.
Elegir un conjunto de caracteres y una clasificación se reduce a si su aplicación está internacionalizada o no. Si no es así, ¿a qué configuración regional se dirige?
Para elegir qué conjunto de caracteres desea admitir, debe considerar su aplicación. Si está almacenando entradas proporcionadas por el usuario, puede ser difícil prever todas las configuraciones regionales en las que eventualmente se utilizará su software. Para admitirlos a todos, podría ser mejor admitir el UCS (Unicode) desde el principio. Sin embargo, esto tiene un costo; muchos caracteres de Europa occidental ahora requerirán dos bytes de almacenamiento por carácter en lugar de uno.
Elegir la clasificación correcta puede ayudar al rendimiento si su base de datos usa la clasificación para crear un índice, y luego usa ese índice para proporcionar resultados ordenados. Sin embargo, dado que las reglas de clasificación a menudo son específicas de la localidad, ese índice no tendrá valor si necesita ordenar los resultados de acuerdo con las reglas de otra localidad.
Sugiero usar utf8mb4_unicode_ci
, que se basa en el estándar Unicode para ordenar y comparar, que se clasifica con precisión en una amplia gama de idiomas.