Mysql 唯一索引不适用于某个变音符号
我有一个用户表,其中有一列名为“昵称”,utf-8 编码,varchar(20),该表位于 InnoDB 中。有 2 条记录,其中一条的昵称 = 'gunni',另一条昵称 = 'günni'。当我尝试将唯一索引应用于此列时,mysql 给出了以下错误:
第 263 行出现错误 1062 (23000):密钥 2 的条目“gunni”重复
我检查了数据,只有一条记录的名称为“gunni”,如果我将“günni”记录更改为其他记录,则应用唯一索引再次,一切正常。
为什么'günni' & “gunni”是重复的吗?这是它们的十六进制值,我通过 mysql 的 hex() 函数得到:
古尼-> 67756E6E69
古尼-> 67C3BC6E6E69
它们显然不同。为什么mysql将这两个视为相同?或者有什么我不知道的关于唯一索引的事情?或者甚至,这可能是 mysql 的错误吗?
I have a users table in which there's a column called 'nickname', utf-8 encoded, varchar(20), the table is in InnoDB. There're 2 records one has a nickname = 'gunni' and the other nickname = 'günni'. When I tried to apply a unique index onto this column, mysql gave me this error :
ERROR 1062 (23000) at line 263: Duplicate entry 'gunni' for key 2
I checked the data there's only one record that has the name 'gunni', and if I change the 'günni' record to something else then apply the unique index again, everything works fine.
How come 'günni' & 'gunni' be duplicates? Here is the hex values for them, I get this with mysql's hex() function :
gunni -> 67756E6E69
günni -> 67C3BC6E6E69
They're obviously different. How come mysql treats these 2 as the same? Or is there something I don't know about unique indexes? Or even, could this be a mysql bug?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这是因为您正在使用的排序规则。
任何以 _ci 结尾的内容都不区分大小写(并且也不区分重音/元音变音)。所以是的,MySQL 会认为“günni”和“gunni”是同一件事,除非你改变你的排序规则。
文档: http://dev.mysql.com/doc/refman /5.0/en/charset-table.html
It's because of the collation you are using.
Anything that ends with _ci is case-insensitive (and also accent/umlaut insensitive). So yes, MySQL will consider "günni" and "gunni" the same thing, unless you change your collation.
Docs: http://dev.mysql.com/doc/refman/5.0/en/charset-table.html