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.

¿Fue útil?

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 & # 233; & # 232; & # 234; f , si se ordena por su representación binaria, irá a 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top