首页 > 解决方案 > Mysql - “utf8_unicode_ci”和“utf8_persian_ci”有什么区别?

问题描述

在 MySQL 数据库中,我将波斯语句子作为 Unicode(utf8_unicode_ci) 保存在一个表中。然后我将排序规则更改为 utf8_persian_ci 但结果相同。没有进行任何更改。

“utf8_unicode_ci”和“utf8_persian_ci”有什么区别?

标签: mysqlunicodedifferencebetweenfarsi

解决方案


(我不能作为权威专门针对波斯排序规则发言。) 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_collat​​ions.htmlhttp://mysql.rjweb.org/utf8mb4_collat​​ions.html似乎说西欧字符在这些排序规则中的排序方式相同。


推荐阅读