2010-07-26 8 views
7

Tengo una tabla de usuarios en la que hay una columna llamada 'apodo', codificación utf-8, varchar (20), la tabla está en InnoDB. Hay 2 registros uno tiene un apodo = 'gunni' y el otro apodo = 'günni'. Cuando traté de aplicar un índice único en esta columna, MySQL me dio este error:El índice único de Mysql no funciona en una cierta diéresis

ERROR 1062 (23000) en la línea 263: Duplicar entrada 'Gunni' para la llave 2

he comprobado el datos solo hay un registro que tiene el nombre 'gunni', y si cambio el registro 'günni' a otra cosa y luego vuelvo a aplicar el índice único, todo funciona bien.

¿Cómo es que 'günni' & 'gunni' estar duplicado? Aquí es los valores hexadecimales para ellos, me sale esto con el hexágono del mysql() Función:

Gunni -> 67756E6E69

Günni -> 67C3BC6E6E69

Obviamente son diferentes. ¿Cómo es que mysql trata a estos 2 como lo mismo? ¿O hay algo que no sé sobre índices únicos? O incluso, ¿podría ser esto un error de mysql?

+0

¿Qué motor de almacenamiento está utilizando? – Sarfraz

+0

@sAc: motor de almacenamiento = InnoDB – Shawn

Respuesta

7

Es debido a la intercalación que está utilizando.

Cualquier cosa que termine con _ci no distingue entre mayúsculas y minúsculas (y también acentúa/umlaut insensible). Así que sí, MySQL considerará "günni" y "gunni" lo mismo, a menos que cambie su intercalación.

Docs: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html

+0

¿puede funcionar utf8-bin en mi caso? Gracias. – Shawn

+0

@Shawn Debería. – NullUserException

+0

@Shawn ¿Funcionó? – NullUserException

Cuestiones relacionadas