2008-12-04 24 views

Respuesta

424

Desde MySQL docs:

Un personaje establece es un conjunto de símbolos y codificaciones. Una colación es un conjunto de reglas para comparar caracteres en un conjunto de caracteres . Hagamos la distinción clara con un ejemplo de un conjunto de caracteres imaginarios.

Supongamos que tenemos un alfabeto con cuatro letras: 'A', 'B', 'a', 'b'. Nosotros 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 para 'A', y la combinación de las cuatro letras y sus codificaciones es un conjunto de caracteres.

Supongamos ahora que queremos comparar dos valores de cadena, 'A' y 'B'. La forma más simple de hacer esto es mirar las codificaciones 0 para 'A' y 1 para 'B'. Como 0 es menor que 1, decimos 'A' es menor que 'B'. Ahora, lo que hemos hecho es aplicar una recopilación a nuestro conjunto de caracteres . La intercalación es un conjunto de reglas (solo una regla en este caso): "compare las codificaciones". Llamamos a esto la más simple de todas las colaciones posibles una colación binaria .

¿Pero y si queremos decir que las letras minúsculas y mayúsculas son equivalente? Entonces tendríamos en menos dos reglas: (1) tratar las letras minúsculas 'a' y 'b' de como equivalente a 'A' y 'B'; (2) luego compare las codificaciones. Llamamos a esto una intercalación de mayúsculas y minúsculas insensible a . Es un poco más complejo que una colación binaria.

En la vida real, la mayoría de los juegos de caracteres tienen muchos personajes: no sólo '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 colaciones tienen muchas reglas: no acaba de mayúsculas y minúsculas, sino también insensibilidad acento (un "acento" es una marca unido a un personaje como en alemán 'o') y de varios caracteres asignaciones (como la regla de que 'ö' = 'OE' en una de las dos colaciones alemanas ).

170

A character encoding 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.

El collation es cómo comparar caracteres, en latin9, hay letras como e é è ê f, si se clasifican por su representación binaria, irá e f é ê è pero si la intercalación se establece en, por ejemplo, francés, tendrá ellas en el orden que usted pensó que serían, que es todo e é è ê son iguales, y luego f.

+4

Es importante tener en cuenta que podría haber muchas colaciones diferentes para un solo juego de caracteres. El que está "bien" depende de la semántica del texto que normalmente está determinado por el idioma en el que está escrito. – Phil

19

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 universales. 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 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 intercalación comprende reglas que especifican cómo se pueden comparar los caracteres para ordenar. Las reglas de intercalación pueden ser específicas de la configuración regional: el orden correcto de dos caracteres varía de un idioma a otro.

La elección de un conjunto de caracteres y la intercalación se reduce a si su aplicación está internacionalizada o no. Si no es así, ¿a qué entorno regional se dirige?

Para elegir qué conjunto de caracteres desea apoyar, 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 apoyar el UCS (Unicode) desde el principio. Sin embargo, hay un costo para esto; muchos caracteres europeos occidentales 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 suelen ser específicas de la configuración regional, ese índice no tendrá valor si necesita ordenar los resultados de acuerdo con las reglas de otra configuración regional.

2

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

+1

del OP: "Estoy pidiendo una explicación de los dos y cómo elegirlos" –

Cuestiones relacionadas