代码之家  ›  专栏  ›  技术社区  ›  Shawn

Mysql unique index在特定的umlaut上不起作用

  •  8
  • Shawn  · 技术社区  · 15 年前

    我有一个users表,其中有一列名为'nickname',utf-8编码,varchar(20),表在InnoDB中。有两张唱片,一张昵称为“gunni”,另一张昵称为“gnni”。当我尝试对该列应用唯一索引时,mysql给了我以下错误:

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

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

    为什么是“gnni”&'古尼是复制品吗?下面是它们的十六进制值,我通过mysql的hex()函数得到:

    甘尼->67756E69型

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

    1 回复  |  直到 5 年前
        1
  •  12
  •   NullUserException Mark Roddy    15 年前

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

    任何以_ci结尾的字符都不区分大小写(也不区分重音/元音变音符)。所以是的,MySQL会考虑“gnni”和“gunni”是同一回事,除非您更改排序规则。

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

    推荐文章