Pergunta

Eu posso ler o Mysql documentação e é bem claro. Mas, como se decide qual personagem definido para usar? Em que dados o agrupamento tem um efeito?

Estou pedindo uma explicação para os dois e como escolhê -los.

Foi útil?

Solução

De mysql documentos:

UMA conjunto de caracteres é um conjunto de símbolos e codificações. UMA agrupamento é um conjunto de regras para comparar caracteres em um conjunto de caracteres. Vamos deixar a distinção clara com um exemplo de um conjunto de personagens imaginários.

Suponha que tenhamos um alfabeto com quatro letras: 'a', 'b', 'a', 'b'. Damos a cada letra um número: 'a' = 0, 'b' = 1, 'a' = 2, 'b' = 3. A letra 'a' é um símbolo, o número 0 é a codificação para 'a' e a combinação de todas as quatro letras e suas codificações é um conjunto de personagens.

Agora, suponha que queremos comparar dois valores de string, 'a' e 'b'. A maneira mais simples de fazer isso é olhar para as codificações: 0 para 'a' e 1 para 'b'. Como 0 é menor que 1, dizemos 'A' é menor que 'B'. Agora, o que acabamos de fazer é aplicar um agrupamento ao nosso conjunto de personagens. O agrupamento é um conjunto de regras (apenas uma regra neste caso): "Compare as codificações". Chamamos isso mais simples de todas as colações possíveis de agrupamento binário.

Mas e se quisermos dizer que as letras minúsculas e maiúsculas são equivalentes? Então teríamos pelo menos duas regras: (1) tratar as letras minúsculas 'a' e 'b' como equivalente a 'a' e 'b'; (2) Em seguida, compare as codificações. Chamamos isso de agrupamento insensível ao caso. É um pouco mais complexo do que um agrupamento binário.

Na vida real, a maioria dos conjuntos de personagens tem muitos personagens: não apenas 'A' e 'B', mas alfabetos inteiros, às vezes vários alfabetos ou sistemas de escrita oriental com milhares de personagens, além de muitos símbolos especiais e marcas de pontuação. Também na vida real, a maioria das colações tem muitas regras: não apenas a insensibilidade do caso, mas também a insensibilidade ao acentuação (um "sotaque" é uma marca anexada a um personagem como no alemão 'Ö') e mapeamentos de caracteres múltiplos (como a regra que ' Ö '=' OE 'em uma das duas colações alemãs).

Outras dicas

UMA codificação de caracteres é uma maneira de codificar caracteres para que eles se encaixem na memória. Ou seja, se o charset for ISO-8859-15, o símbolo do euro, €, será codificado como 0XA4 e, no UTF-8, será 0xe282ac.

o agrupamento é como comparar caracteres, em latim9, há cartas como e é è ê f, se classificados por sua representação binária, ele irá e f é ê è Mas se o agrupamento estiver definido, por exemplo, francês, você os terá na ordem que pensou que seria, o que é tudo e é è ê são iguais e então f.

Um conjunto de personagens é um subconjunto de todos os glifos escritos. Um caractere codificando especifica como esses caracteres são mapeados para valores numéricos. Algumas codificações de caracteres, como UTF-8 e UTF-16, podem codificar qualquer caractere no conjunto de caracteres universais. Outros, como US-ASCII ou ISO-8859-1, podem codificar apenas um pequeno subconjunto, pois usam 7 e 8 bits por caractere, respectivamente. Como muitos padrões especificam um conjunto de caracteres e uma codificação de caracteres, o termo "conjunto de caracteres" geralmente é substituído livremente pela "codificação de caracteres".

Um agrupamento compreende regras que especificam como os caracteres podem ser comparados para classificar. As regras de collações podem ser específicas do local: a ordem adequada de dois caracteres varia de idioma para idioma.

Escolher um conjunto de personagens e o agrupamento se resume a se o seu aplicativo está internacionalizado ou não. Caso contrário, qual local você está segmentando?

Para escolher qual conjunto de personagens você deseja apoiar, você deve considerar seu aplicativo. Se você estiver armazenando a entrada fornecida pelo usuário, pode ser difícil prever todos os locais nos quais seu software será usado. Para apoiar todos eles, pode ser melhor apoiar o UCS (Unicode) desde o início. No entanto, há um custo para isso; Muitos personagens da Europa Ocidental agora exigirão dois bytes de armazenamento por caractere em vez de um.

A escolha do agrupamento certo pode ajudar o desempenho se o seu banco de dados usar o agrupamento para criar um índice e posteriormente esse índice para fornecer resultados classificados. No entanto, como as regras de agrupamento geralmente são específicas para o local, esse índice será inútil se você precisar classificar os resultados de acordo com as regras de outro local.

Eu sugiro usar utf8mb4_unicode_ci, que é baseado no padrão Unicode para classificação e comparação, que classifica com precisão em uma ampla gama de idiomas.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top