11

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

第 263 行的错误 1062 (23000):键 2 的重复条目“gunni”

我检查了数据,只有一条名为“gunni”的记录,如果我将“günni”记录更改为其他内容,然后再次应用唯一索引,一切正常。

'günni' 和 'gunni' 怎么会重复?这是它们的十六进制值,我通过 mysql 的 hex() 函数得到:

冈尼-> 67756E6E69

günni -> 67C3BC6E6E69

他们显然是不同的。mysql如何将这两个视为相同?或者有什么我不知道的唯一索引?甚至,这可能是一个 mysql 错误吗?

4

1 回答 1

13

这是因为您使用的排序规则。

以 _ci 结尾的任何内容都不区分大小写(并且也不区分重音/变音符号)。所以是的,除非您更改排序规则,否则 MySQL 会认为“günni”和“gunni”是同一件事。

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

于 2010-07-26T05:30:07.040 回答