首页 > 解决方案 > 为什么我的 MySQL 实例认为“'ī”和“i”是相等的字符?

问题描述

我在 MySQL 中遇到了唯一性约束问题。我有两个不同的角色:

为什么 MySQL 认为这些是平等的?当我运行以下命令时:

SELECT STRCMP('ī', 'i')

我得到一个返回值0

根据请求,以下是有关我的环境的一些信息:

mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_unicode_ci   |
+--------------------------+----------------------+

标签: mysqlcollation

解决方案


您的数据库默认不区分大小写:这是ci结尾的部分@@collation_database。在这种整理中,对于大多数语言,变音符号是折叠的。从文档:

为了进一步说明,以下等式在 utf8_general_ci 和 utf8_unicode_ci 中都成立(对于比较或搜索中的效果,请参阅第 10.8.6 节,“整理效果的示例”):

Ä = A
Ö = O
Ü = U

https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-sets.html

除非您有这样做的理由,否则我建议您更改此默认设置。


推荐阅读