¿Cuál es la diferencia entre colación y juego de caracteres?

24

Tengo una pregunta general sobre bases de datos. Usualmente usamos el término cotejo con bases de datos. Me gustaría saber cómo es diferente del conjunto de caracteres. Supongo que la intercalación es un subconjunto del conjunto de caracteres. Si es cierto, cuál es el propósito de la recopilación múltiple bajo un conjunto de caracteres.

Shameer
fuente
Consulte también stackoverflow.com/questions/341273/…
Sanghyun Lee

Respuestas:

27

Los juegos de caracteres son una lista de símbolos. Si compara ASCII con latin1 , con latin1 podrá escribir todas las palabras americanas porque latin1 contiene todos los caracteres ASCII , que son suficientes para escribir cualquier palabra en inglés. Por el contrario, con ASCII no podrá escribir todas las palabras de idiomas específicos de Europa Occidental, porque, por ejemplo, faltan caracteres como 'À', 'ë', 'õ', 'Ñ'.

La colación trata sobre la comparación entre personajes. Define un conjunto de reglas para comparar los caracteres de un conjunto de caracteres.

En MySQL, las intercalaciones a menudo están relacionadas con un idioma (por ejemplo, 'latin1_swedish_ci', 'latin1_german1_ci', etc.). Cuando solicite una consulta de selección, se colocará una palabra que comience por 'ö' entre dos palabras que comiencen por 'o' y 'p' en algunos idiomas (con algunas intercalaciones). Pero con otra recopilación, este personaje puede colocarse completamente al final, lo que hace que la selección resultante sea diferente.

uloBasEI
fuente
Gracias, ahora está casi claro. Entonces, ¿creo que seleccionar la recopilación es una preocupación seria al planificar un sitio multilingüe? Por ejemplo, si la clasificación es 'latin1_swedish_ci', no obtendré el resultado esperado al tratar con lenguajes unicode.
Shameer
1
Te sugiero que elijas unicode o terminarás teniendo problemas en algún momento (por ejemplo, idiomas asiaticos). La clasificación dependerá del idioma del usuario. Esto es algo con lo que debe tener cuidado si desea tener una herramienta multilingüe.
deadalnix
6

Como la respuesta anterior, el conjunto de caracteres es un conjunto de caracteres (letras, números, ideogramas, etc.) asignados a un número; para poder verlos, debe tener la fuente (las pequeñas "imágenes" que leemos). Eran importantes usando LatinX, porque para cada X, el mismo número (byte) podría referirse a un carácter diferente.

Hoy en día es más importante seleccionar la codificación: el estándar es UTF-8, la representación más exitosa de Unicode (compatible con ASCII pero tan flexible para incluir todos los idiomas, incluso chino y japonés) y el estándar W3C. En otras palabras, incluye todos los conjuntos de caracteres.

Colación: esta es una palabra antigua, derivada del latín. Significa: comparar una copia (manuscrito) con el original para encontrar diferencias (errores o cambios). Fue muy útil en el pasado, pero ahora es casi un arcaismo porque nuestros documentos y libros están escritos usando computadoras y la copia siempre es idéntica al original. Ejemplo: en italiano (derivado del latín) existe el verbo "collazionare", pero está en los diccionarios y nadie lo usa.

Entonces, la clasificación define el comportamiento de los operadores de comparación: =,>, <, <=,> = ...

Por supuesto, esos operadores se utilizan para decidir si dos cadenas son iguales, o si una palabra es "mayor" que otra, muy importante si queremos ordenar. Las letras no están en el mismo orden para cada idioma, por lo que una palabra puede ser mayor que otra usando una intercalación, pero no usando otra. Ver [1] para un ejemplo práctico.

  • las intercalaciones "bin" son las más estrictas: SELECT "b" = "B" => FALSE

  • las intercalaciones "ci" no distinguen entre mayúsculas y minúsculas: SELECT "b" = "B" => TRUE

  • los "generales" tienden a ignorar algunas diferencias: SELECCIONE "a" = "à" => VERDADERO

  • otros son específicos para uno o más idiomas. Ejemplo "sueco" (no sé por qué sueco es a menudo un defecto)

Todavía estoy buscando un sitio web donde se describa en detalle el comportamiento de cada cotejo ... esos ejemplos se deben a mi experiencia.

[1] http://www.olcot.co.uk/sql-blogs/revised-difference-between-collation-sql_latin1_general_cp1_ci_as-and-latin1_general_ci_as

Francesco
fuente
1
sueco es el valor predeterminado en algunos bits de MySQL todavía. Su legado de cuando MySQL fue creado por un pequeño equipo en Suecia en el '95
Chris Wood