sql >> Base de Datos >  >> RDS >> Oracle

¿No entiendo la colación? (Mysql, RDBMS, juegos de caracteres)

El punto principal de la recopilación de una base de datos es determinar cómo se ordenan y comparan los datos.

Sensible a mayúsculas y minúsculas en las comparaciones de cadenas

SELECT "New York" = "NEW YORK";` 

devolverá verdadero para una colación que no distingue entre mayúsculas y minúsculas; false para una que distingue entre mayúsculas y minúsculas.

_ci puede indicar qué intercalación hace cuál. y _cs sufijo en el nombre de la colación. _bin las colaciones hacen comparaciones binarias (las cadenas deben ser 100% idénticas).

Comparación de diéresis/caracteres acentuados

la intercalación también determina si los caracteres acentuados se tratan como sus contrapartes de base latina en las comparaciones de cadenas.

SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

devolverá verdadero en el primer caso; falso en este último. Deberá leer la descripción de cada colación para saber cuál es cuál.

Ordenación de cadenas

La intercalación influye en la forma en que se ordenan las cadenas.

Por ejemplo,

  • Diéresis Ä Ö Ü están al final del alfabeto en el alfabeto finlandés/sueco latin1_swedish_ci

  • se tratan como A O U en alemán Clasificación DIN-1 (latin_german1_ci )

  • y como AE OE UE en alemán Clasificación DIN-2 (latin_german2_ci ). (clasificación de "agenda telefónica")

  • En latin1_spanish_ci , "ñ" (n-tilde) es una letra separada entre "n" y "o".

Estas reglas darán como resultado diferentes órdenes de clasificación cuando se utilicen caracteres no latinos.

Uso de intercalaciones en tiempo de ejecución

Debe elegir una intercalación para su tabla y columnas, pero si no le importa el impacto en el rendimiento, puede forzar las operaciones de la base de datos en una determinada intercalación en tiempo de ejecución usando COLLATE palabra clave.

Esto ordenará table por el name columna usando las reglas de clasificación alemanas DIN-2:

SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

Usando COLLATE en tiempo de ejecución tendrá implicaciones en el rendimiento, ya que cada columna debe convertirse durante la consulta. Así que piénselo dos veces antes de aplicar esto a grandes conjuntos de datos.

Referencia MySQL:

  • Conjuntos de caracteres y intercalaciones compatibles con MySQL
  • Ejemplos del efecto de la colación
  • Problemas de intercalación