mysql - 为什么我的 MySQL 实例认为“'ī”和“i”是相等的字符?
问题描述
我在 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/en/charset-unicode-sets.html
除非您有这样做的理由,否则我建议您更改此默认设置。
推荐阅读
- .net - 如何将 aws Secrets Manager 与 azure CI/CD 管道集成?
- discord - Discord Py 错误:TypeError:字符串索引必须是整数
- azure-active-directory - 无法通过具有委派权限的 Microsoft Graph API 发送电子邮件
- c# - Unity蓝牙信标三边测量
- jmespath - JMESPATH 不包含/starts_with
- iis - 设置 Cache-Control:no-cache 后 HTTP 标头删除/更改 ETag
- javascript - 如何让按钮多次输出值?
- php - Xampp内部文件如PhpMyAdmin\index.php、htdocs\index.php、config.php、response.php、whitelist.php在调试模式下进行
- r - 结合 plot3D , plotly 和 ggplot 可视化
- javascript - 社交媒体应用中用户交互的 Firestore 结构