El índice único de MySQL no funciona en un cierto umlaut
-
29-09-2020 - |
Pregunta
Tengo una tabla de usuarios en la que hay una columna llamada 'apodo', UTF-8 codificada, VarChar (20), la tabla está en InnoDB.Hay 2 registros, uno tiene un apodo= 'Gunni' y el otro apodo= 'Günni'.Cuando intenté aplicar un índice único en esta columna, MySQL me dio este error:
Error 1062 (23000) en la línea 263: entrada duplicada 'gunni' para la clave 2
Revisé los datos Solo hay un registro que tiene el nombre 'Gunni', y si cambio el registro 'Günni' a otra cosa, luego aplique el índice único nuevamente, todo funciona bien.
¿Cómo es 'Günni' & 'Gunni' se duplica?Aquí están los valores hexagonales para ellos, obtengo esto con la función HEX () de MySQL:
gunni -> 67756E6E69
Günni -> 67C3BC6E6E69
son obviamente diferentes.¿Cómo es que MySQL trata estos 2 como los mismos?¿O hay algo que no conozco sobre índices únicos?O incluso, ¿podría ser este un error MySQL?
Solución
Es debido a la colación que está utilizando.
Cualquier cosa que termine con _CI es insensible a la caja (y también acento / umlaut insensible).Entonces, sí, MySQL considerará "Günni" y "Gunni" lo mismo, a menos que cambie su colación.
documentos: http://dev.mysql.com/DOC / REFMAN / 5.0 / ES / BARSET-TABLE.HTML