Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Eu não entendo Collation? (Mysql, RDBMS, conjuntos de caracteres)


O ponto principal de um agrupamento de banco de dados é determinar como os dados são classificados e comparados.

Sensibilidade de maiúsculas e minúsculas de comparações de strings
SELECT "New York" = "NEW YORK";` 

retornará true para um agrupamento sem distinção entre maiúsculas e minúsculas; false para um case sensitive.

Qual agrupamento faz o que pode ser informado pelo _ci e _cs sufixo no nome do agrupamento. _bin collations fazem comparações binárias (strings devem ser 100% idênticas).

Comparação de tremas/caracteres acentuados

a ordenação também determina se os caracteres acentuados são tratados como suas contrapartes de base latina em comparações de strings.
SELECT "Düsseldorf" =  "Dusseldorf";
SELECT "Èclair" =      "Eclair";

retornará true no primeiro caso; falso neste último. Você precisará ler a descrição de cada agrupamento para descobrir qual é qual.

Classificação de strings

A ordenação influencia a maneira como as strings são classificadas.

Por exemplo,

  • Tremas Ä Ö Ü estão no final do alfabeto no alfabeto finlandês/sueco latin1_swedish_ci

  • eles são tratados como A O U em alemão classificação DIN-1 (latin_german1_ci )

  • e como AE OE UE em alemão classificação DIN-2 (latin_german2_ci ). (classificação de "catálogo telefônico")

  • Em latin1_spanish_ci , "ñ" (n-til) é uma letra separada entre "n" e "o".

Essas regras resultarão em diferentes ordens de classificação quando caracteres não latinos forem usados.

Usando ordenações em tempo de execução

Você precisa escolher um agrupamento para sua tabela e colunas, mas se não se importar com o impacto no desempenho, poderá forçar as operações do banco de dados em um determinado agrupamento em tempo de execução usando o COLLATE palavra-chave.

Isso classificará a table pelo name coluna usando regras de classificação DIN-2 alemãs:
SELECT name
FROM table
ORDER BY name COLLATE latin1_german2_ci;

Usando COLLATE em tempo de execução terá implicações de desempenho, pois cada coluna deve ser convertida durante a consulta. Portanto, pense duas vezes antes de aplicar isso em grandes conjuntos de dados.

Referência MySQL:
  • Conjuntos de caracteres e agrupamentos suportados pelo MySQL
  • Exemplos do efeito do agrupamento
  • Problemas de agrupamento