mysql - Mysql - “utf8_unicode_ci”和“utf8_persian_ci”有什么区别?
问题描述
在 MySQL 数据库中,我将波斯语句子作为 Unicode(utf8_unicode_ci) 保存在一个表中。然后我将排序规则更改为 utf8_persian_ci 但结果相同。没有进行任何更改。
“utf8_unicode_ci”和“utf8_persian_ci”有什么区别?
解决方案
(我不能作为权威专门针对波斯排序规则发言。) MySQL 排序规则背后的一般思想是
- _bin -- 只检查位;这对于“单词”通常是无用的。
- _general_ci - 不区分大小写和重音,在涉及所有其他“规则”时相当蹩脚。
- _unicode_ci、_unicode_520_ci、_0900_ai_ci -- 不区分大小写和重音;基于 Uniocde 标准 4.0.0、5.2.0、9.0.0;但对于任何特定语言(西班牙语、波斯语、德语等)都不太可能是“正确的”
- _persian_ci (etc) -- 类似于 Unicode 排序规则之一,但针对语言进行了调整。
特定排序规则如何不同的示例:
- _spanish_ci -- 将“ch”视为两个字母,与大多数排序规则一样
- _spanish2_ci - 将“ch”视为单个字母:'cz' < 'ch' < 'da'。(以及其他差异。)
- _lithuanian_ci -- "ch" 与 "c" 相同;那就是'cha' ='ca'。
我认为波斯字符中的 _persian_ci 和 _unicode_ci 之间可能存在差异。浏览一下http://mysql.rjweb.org/utf8_collations.html和http://mysql.rjweb.org/utf8mb4_collations.html似乎说西欧字符在这些排序规则中的排序方式相同。
推荐阅读
- python - pycaret 和 H2O 的异常检测结果不同
- php - AS400 上的 Laravel 8 使用带点的 ODBC 表名
- javascript - 在使用 JSON 值之前检查是否存在的更简单的方法
- ecmascript-6 - 使用 object.defineProperty 或 reflet.defineProperty 后对象属性未定义
- docker-compose - 通过环境变量 docker-compose redis 密码
- asp.net-core - .NET Core 的强制登录 OIDC 中间件
- javascript - react-native-reanimated 2:无法使用“worklet”关键字创建函数(未定义不是函数)
- c# - 按值对数据快照的子项进行排序
- java - 如何在 Swagger API 请求中指定 JDBC 时间戳?
- c - 使用 -c 'compile-only' 选项时是否需要使用 -l library 选项(以及在什么阶段需要 fPIC 选项)?