我有一个用户表,其中有一个名为“昵称”的列,UTF-8编码,varchar(20),表位于innodb中。有2条记录有一个昵称='gunni'和另一个昵称='günni'。当我尝试在此列上应用唯一索引时,MySQL给了我这个错误:

误差1062(23000)在第263行:键2的重复条目'gunni'>

我检查了数据只有一个有一个记录的名称'gunni',如果我将'günni'记录更改为其他东西,然后再次应用唯一索引,一切都正常工作。

如何“günni”和'gunni'重复?这是它们的十六进制值,我用mysql的hex()函数来实现这个:

gunni - > 67756e6e69

günni - > 67c3bc6e6e69

它们显然是不同的。MySQL如何对待这2同样的情况?还是有什么我不知道唯一的索引?甚至,这可能是一个mysql bug?

有帮助吗?

解决方案

是因为你正在使用的整理。

以_ci结尾的任何东西都是不区分大小写的(并且还有口音/ umlaut不敏感)。所以是的,MySQL将考虑“Günni”和“Gunni”同样的事情,除非你改变你的归属。

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top