我遇到了MySQL中的唯一性约束问题。我有两个不同的角色:
ī
这是ASCII十进制299i
这是ASCII十进制109为什么MySQL认为这些相等?当我运行以下命令时:
SELECT STRCMP('ī', 'i')
我得到的返回值为0
。
根据请求,以下是有关我的环境的一些信息:
mysql> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4 | utf8mb4_unicode_ci |
+--------------------------+----------------------+
您的数据库默认默认不区分大小写:这是。ci
结尾的部分@@collation_database
。在这种校对中,对于大多数语言来说,变音符号都被折叠。从文档:
为了进一步说明,utf8_general_ci和utf8_unicode_ci中都具有以下相等性(有关比较或搜索中的影响,请参见第10.8.6节“排序规则的影响示例”):
Ä=
AÖ=
OÜ= U
https://dev.mysql.com/doc/refman/8.0/zh-CN/charset-unicode-sets.html
除非您有理由这样做,否则建议您更改此默认值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句