Mysql 唯一索引不适用于某个变音符号

发布于 2024-09-11 05:23:47 字数 506 浏览 11 评论 0原文

我有一个用户表,其中有一列名为“昵称”,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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

谢绝鈎搭 2024-09-18 05:23:47

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

任何以 _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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文