sql >> Base de Datos >  >> RDS >> Mysql

mysql utf8mb4_unicode_ci causa colisión de clave única

Te estás perdiendo el punto sobre CHARACTER SET y COLLATION . UN CHARACTER SET es una colección de diferentes personajes. UNA COLLATION dice si tratar a los personajes como iguales -- piensa en A y a -- caracteres diferentes, pero tratados para ORDER BY y WHERE = , etc. como si fueran lo mismo.

mysql> SELECT 'K'='K' COLLATE utf8_unicode_ci;
+-----------------------------------+
| 'K'='K' COLLATE utf8_unicode_ci  |
+-----------------------------------+
|                                 1 |
+-----------------------------------+

Entonces, en utf8_unicode_ci (o utf8mb4_unicode_ci), esos dos caracteres se consideran "iguales".

"Igual" es la prueba para UNIQUE llaves.

Establecer la COLLATION para la columna a lo que tenga sentido para usted.

  • utf8mb4_unicode_ci para buenas comparaciones de la 'vida real', aparentemente incluyendo esta. K=k=Ķ=ķ
  • utf8mb4_unicode_ci para comparaciones más simples. En particular, ninguna combinación de 2 caracteres coincide con codificaciones de 1 carácter. Se produce el plegado de la caja y la eliminación de acentos. K=k=Ķ=ķ
  • utf8mb4_bin comprueba ciegamente los bits. Sin plegado de caja, etc. K k Ķ ķ son todos desiguales.

utf8mb4_latvian_ci es un poco diferente:K=k pero no igual a Ķ=ķ . Hay otras colaciones especializadas para otros idiomas (principalmente de Europa occidental).

Tu se llama "LETRA K MAYÚSCULA LATINA DE ANCHO COMPLETO", por lo que es bastante razonable que se compare igual a la K latina .