Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci causa colisão de chave única


Você está perdendo o ponto sobre CHARACTER SET e COLLATION . Um CHARACTER SET é uma coleção de personagens diferentes. Um COLLATION diz se deve tratar os caracteres como iguais -- pense em A e a -- caracteres diferentes, mas tratados para ORDER BY e WHERE = , etc como sendo o mesmo.
mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci  |
+-----------------------------------+
|                                 1 |
+-----------------------------------+

Portanto, em utf8_unicode_ci (ou utf8mb4_unicode_ci), esses dois caracteres são considerados "iguais".

"Igual" é o teste para UNIQUE chaves.

Defina o COLLATION para a coluna para o que fizer sentido para você.
  • utf8mb4_unicode_ci para boas comparações da 'vida real', aparentemente incluindo esta. K=k=Ķ=ķ
  • utf8mb4_unicode_ci para comparações mais simples. Em particular, nenhuma combinação de 2 caracteres corresponde a codificações de 1 caractere. A dobragem da caixa e a remoção de acentos ocorrem. K=k=Ķ=ķ
  • utf8mb4_bin verifica cegamente os bits. Sem dobra de caixa, etc. K k Ķ ķ são todos desiguais.

utf8mb4_latvian_ci é um pouco diferente:K=k mas não igual a Ķ=ķ . Existem outros agrupamentos especializados para outros idiomas (principalmente da Europa Ocidental).

Seu é chamado de "LETRA MAIÚSCULA LATINA K", então é bastante razoável que seja igual ao latim K .