MySQL认为'е'和'ё'相等,我如何设置它以考虑它们不同?

Fra*_*ank 8 mysql

我有一个对varchar字段有唯一约束的表.当我尝试在两个不同的行中插入"e"和"ё"时,我会被一个唯一的约束违规提示.执行以下操作select表明,尽管MySQL的HEX值分别为D0B5和D191,但MySQL认为这些字母是等效的.

select  '?' = '?',
        hex('?'),
        hex('?');
Run Code Online (Sandbox Code Playgroud)

经过相当数量的谷歌搜索后,我遇到了这个 MySQL错误报告,它似乎解决了这个问题.Sveta Smirnova的最后一个回应表明这种行为是设计的,并且是指utf8_unicode_ci,欧洲字母表(MySQL 6.0.4)校对图表.

为了查询目的,如何告诉MySQL'''不等于'ё',如何更改唯一约束以注意这一事实?

Phi*_*ing 1

您可能希望检查这个答案: Is it possible to remove mysql table collat​​ion?

您看到的行为是标准的。在大多数情况下,它会产生最佳结果。从兴趣的角度来看,您是否有一个例子来说明这如何给您带来问题。您是否找到了除了变音符号之外的两个匹配的单词?

不管怎样,你唯一能做的就是改变排序规则。这可以在服务器、数据库、表甚至字段级别完成。

而不是我复制如何执行此操作的手册;请点击此链接: http://dev.mysql.com/doc/refman/5.7/en/charset-syntax.html

这里列出了支持的不同排序规则: http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html