我们在 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 字符集地狱
它很长,但是相信我,您需要这个长度来解释问题和解决方案。