¿Qué significa exactamente el conjunto de caracteres y la intercalación?

Resuelto Sander Versluys asked hace 15 años • 4 respuestas

Puedo leer la documentación de MySQL y es bastante claro. Pero, ¿cómo se decide qué conjunto de caracteres utilizar? ¿Sobre qué datos tiene efecto el cotejo?

Estoy pidiendo una explicación de los dos y cómo elegirlos.

Sander Versluys avatar Dec 04 '08 23:12 Sander Versluys
Aceptado

De documentos MySQL :

Un juego 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. Dejemos clara la distinción con un ejemplo de un conjunto de caracteres imaginarios.

Supongamos que tenemos un alfabeto con cuatro letras: 'A', 'B', 'a', 'b'. Le damos 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 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 hacerlo es observar 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 intercalación a nuestro conjunto de caracteres. La intercalación es un conjunto de reglas (solo una regla en este caso): "comparar las codificaciones". A esta intercalación, la más simple de todas las posibles, la llamamos intercalación binaria.

Pero ¿y 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 compare las codificaciones. A esto lo llamamos una intercalación que no distingue entre mayúsculas y minúsculas. Es un poco más complejo que una intercalación binaria.

En la vida real, la mayoría de los conjuntos de caracteres tienen muchos caracteres: no sólo 'A' y 'B' sino alfabetos completos, a veces múltiples alfabetos o sistemas de escritura orientales 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 sólo la insensibilidad a las mayúsculas y minúsculas, sino también a los acentos (un "acento" es una marca adjunta a un carácter como en alemán 'ö') y asignaciones de múltiples caracteres (como la regla que ' ö' = 'OE' en una de las dos colaciones alemanas).

Dan Esparza avatar Dec 04 '2008 17:12 Dan Esparza

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, €, se codificará como 0xa4 y, en UTF-8, será 0xe282ac.

La intercalación es cómo comparar caracteres, en latin9, hay letras como e é è ê f, si se ordenan por su representación binaria, irá, e f é ê èpero si la intercalación está configurada, por ejemplo, en francés, las tendrás en el orden que pensabas. sería, que es que todos e é è êson iguales, y luego f.

mat avatar Dec 04 '2008 17:12 mat

Un conjunto de caracteres es un subconjunto de todos los glifos escritos. Una codificación de caracteres especifica cómo se asignan esos caracteres a valores numéricos. Algunas codificaciones de caracteres, como UTF-8 y UTF-16, pueden codificar cualquier carácter del conjunto de caracteres universal. Otros, como US-ASCII o ISO-8859-1, sólo pueden codificar un pequeño subconjunto, ya que utilizan 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 intercalación comprende reglas que especifican cómo se pueden comparar los caracteres para ordenarlos. Las reglas de clasificación pueden ser específicas de la región: el orden correcto de dos caracteres varía de un idioma a otro.

La elección de un conjunto de caracteres y una intercalación depende de si su aplicación está internacionalizada o no. Si no, ¿a qué localidad se dirige?

Para elegir qué conjunto de caracteres desea admitir, debe considerar su aplicación. Si almacena información proporcionada por el usuario, puede resultar difícil prever todas las configuraciones regionales en las que eventualmente se utilizará su software. Para admitirlos a todos, sería mejor admitir 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 intercalación correcta puede mejorar el 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 clasificación suelen ser específicas de la configuración regional, ese índice no tendrá valor si necesita ordenar los resultados según las reglas de otra configuración regional.

erickson avatar Dec 04 '2008 17:12 erickson

Sugiero utilizar utf8mb4_unicode_ci, que se basa en el estándar Unicode para clasificación y comparación, que clasifica con precisión en una amplia gama de idiomas.

simhumileco avatar Mar 06 '2017 11:03 simhumileco