我有一个对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'''不等于'ё',如何更改唯一约束以注意这一事实?
您可能希望检查这个答案: Is it possible to remove mysql table collation?
您看到的行为是标准的。在大多数情况下,它会产生最佳结果。从兴趣的角度来看,您是否有一个例子来说明这如何给您带来问题。您是否找到了除了变音符号之外的两个匹配的单词?
不管怎样,你唯一能做的就是改变排序规则。这可以在服务器、数据库、表甚至字段级别完成。
而不是我复制如何执行此操作的手册;请点击此链接: http://dev.mysql.com/doc/refman/5.7/en/charset-syntax.html
这里列出了支持的不同排序规则: http://dev.mysql.com/doc/refman/5.5/en/charset-charsets.html
| 归档时间: |
|
| 查看次数: |
377 次 |
| 最近记录: |