Qual é a diferença entre agrupamento e conjunto de caracteres?

24

Eu tenho uma pergunta geral sobre bancos de dados. Geralmente usamos o termo agrupamento com bancos de dados. Gostaria de saber como é diferente do conjunto de caracteres. Eu acho que agrupamento é um subconjunto de caracteres. Se for verdade, qual é o objetivo da intercalação múltipla em um conjunto de caracteres.

Shameer
fonte
Consulte também stackoverflow.com/questions/341273/…
Sanghyun Lee

Respostas:

27

Conjuntos de caracteres é uma lista de símbolos. Se você comparar ASCII com latin1 , com latin1 poderá escrever todas as palavras americanas porque latin1 contém todos os caracteres ASCII , suficientes para escrever qualquer palavra em inglês. Pelo contrário, com o ASCII, você não poderá escrever todas as palavras de idiomas específicos da Europa Ocidental, porque, por exemplo, caracteres como 'À', 'ë', 'õ', 'Ñ' estão ausentes.

Agrupar é sobre comparação entre caracteres. Ele define um conjunto de regras para comparar caracteres de um conjunto de caracteres.

No MySQL, agrupamentos são frequentemente relacionados a um idioma (por exemplo, 'latin1_swedish_ci', 'latin1_german1_ci', etc.). Quando você solicita uma consulta de seleção, uma palavra iniciada por 'ö' é colocada entre duas palavras iniciadas por 'o' e 'p' em alguns idiomas (com alguns agrupamentos). Porém, com outro agrupamento, esse personagem pode ser colocado completamente no final, o que torna a seleção resultante diferente.

uloBasEI
fonte
Obrigado, está quase claro agora. Então, acho que selecionar o agrupamento é uma preocupação séria ao planejar um site multilíngue? Por exemplo, se o agrupamento for 'latin1_swedish_ci', não estarei obtendo o resultado esperado ao lidar com idiomas unicode.
Shameer
11
Eu sugiro que você escolha o unicode ou você acabará tendo problemas em algum momento (idiomas asiáticos, por exemplo). O agrupamento dependerá do idioma do usuário. Isso é algo com o qual você deve ter cuidado se quiser ter uma ferramenta multilíngue.
Deadlnix
6

Como resposta anterior, o conjunto de caracteres é um conjunto de caracteres (letras, números, ideogramas etc.) atribuídos a um número; para poder vê-los, você deve ter a fonte (as pequenas "figuras" que lemos). Eles eram importantes usando o LatinX, porque para cada X, o mesmo número (byte) poderia se referir a um caractere diferente.

Atualmente, é mais importante selecionar a codificação: o padrão é UTF-8, a representação de maior sucesso do Unicode (compatível com ASCII, mas tão flexível para incluir todos os idiomas, inclusive chinês e japonês) e o padrão W3C. Em outras palavras, inclui todos os conjuntos de caracteres.

Agrupamento: é uma palavra antiga, derivada do latim. Significa: compare uma cópia (manuscrito) com o original para encontrar diferenças (erros ou alterações). Era muito útil no passado, mas agora é quase um arcaismo, porque nossos documentos e livros são escritos usando computadores e a cópia é sempre idêntica ao original. Exemplo: em italiano (derivado do latim) existe o verbo "collazionare", mas está nos dicionários e ninguém o usa.

Portanto, o agrupamento define o comportamento dos operadores de comparação: =,>, <, <=,> = ...

É claro que esses operadores são usados ​​para decidir se duas sequências são iguais ou se uma palavra é "maior" que outra, muito importante se quisermos ordenar. As letras não estão na mesma ordem para todos os idiomas; portanto, uma palavra pode ser maior que outra usando um agrupamento, mas não usando outro. Veja [1] para um exemplo prático.

  • os agrupamentos "bin" são os mais rigorosos: SELECT "b" = "B" => FALSE

  • os agrupamentos "ci" não diferenciam maiúsculas de minúsculas: SELECT "b" = "B" => TRUE

  • o "geral" tende a ignorar algumas diferenças: SELECT "a" = "à" => TRUE

  • outros são específicos para um ou mais idiomas. Exemplo "sueco" (não sei por que o sueco geralmente é um padrão)

Ainda estou procurando um site em que o comportamento de cada agrupamento seja descrito em detalhes ... esses exemplos se devem à minha experiência.

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

Francesco
fonte
11
O sueco é o padrão em alguns bits do MySQL ainda. Seu legado desde quando o MySQL foi criado por uma pequena equipe na Suécia em '95
Chris Wood