MySQL中的UTF8字符串比较

LeG*_*GEC 5 mysql collation case-sensitive

我们在MySQL 5中有关于案例和重音的utf8字符串比较问题:

根据我收集的内容,MySQL通过考虑"字符组应该被视为相等"来实现排序规则.

例如,在utf8_unicode_ci整理中,所有字母"EÉÈÊeéèê"都在同一个框中(与"e"的其他变体一起).

所以如果你有一个包含["video","vidéo","vidÉo","vidÊo","vidêo","vidÈo","vidèo","vidEo"]的表(在用ut8_general_ci整理声明的varchar列中) :

  • 当要求MySQL根据此列对行进行排序时,排序是随机的(MySQL不会强制执行"é"和"É"之间的排序规则),
  • 当要求MySQL在此列上添加唯一键时,它会引发错误,因为它认为所有值都相等.

我们可以用什么设置来解决这两点?

PS:在相关的说明中,我没有看到utf8字符集的任何区分大小写的排序规则.我错过了什么 ?


[编辑]我认为我最初的问题仍然有一些兴趣,我将保留原样(也许有一天会得到肯定的回答).

然而,事实证明,我们关于重音符号字符串比较的问题与我们的文本列的排序规则无关.character_set_client在与MySQL交谈时,它与参数的配置问题相关联- 默认为latin1.

这篇文章向我们解释了这一切,并允许我们解决问题:

走出MySQL角色地狱

它很冗长,但相信我,你需要这个长度来解释问题和解决方案.

Mch*_*chl 1

使用将这些字符视为不同的排序规则。也许 utf8_bin (它区分大小写,因为它对字符进行二进制比较)

http://dev.mysql.com/doc/refman/5.7/en/charset-unicode-sets.html