MySQL中utf8_unicode_ci与utf8_persian_ci的区别是什么?
MySQL utf8_unicode_ci 与 utf8_persian_ci 差异说明
修改表排序规则后查询无变化的原因
修改表的默认排序规则仅对后续新增的列、新插入的数据生效,已经存在的列、已存储的数据不会自动继承新的排序规则。如果要让已有波斯语数据按照新规则排序,需要单独修改对应存储列的排序规则,参考语句:
ALTER TABLE 你的表名 MODIFY 目标列名 原有字段类型 CHARACTER SET utf8 COLLATE utf8_persian_ci;
执行后重新执行带排序的查询即可看到差异。
两种排序规则的核心差异
- 波斯语独有字母排序逻辑不同
utf8_unicode_ci是通用Unicode排序规则,仅按照字符的Unicode编码值排序,不会适配波斯语的本土字母顺序:比如波斯语独有的 پ、چ、ژ、گ 这类字母,在通用规则下会和其他阿拉伯语系字符混排,而utf8_persian_ci严格遵循波斯语官方字母表顺序调整了权重,会按照 پ紧随ب、چ紧随ج、ژ紧随ز、گ紧随ک的本土习惯顺序排列。 - 变音符号处理规则不同
波斯语书写中的元音变音符号、零宽连接/非连接符在utf8_persian_ci中会被忽略排序权重,同词根的单词无论是否带变音符号都会排在一起,符合波斯语本土使用习惯;utf8_unicode_ci会给这类符号赋予独立排序权重,可能出现同词根单词因变音符号不同被拆分排序的情况。 - 数字适配逻辑不同
波斯语本土数字(۰-۹)和阿拉伯数字(0-9)在utf8_persian_ci中会被视为等价排序,而utf8_unicode_ci会按照编码值区分两类数字,同一数值的波斯语数字和阿拉伯数字会被排到不同位置。
内容的提问来源于stack exchange,提问作者user13239154
相关产品推荐
相关产品推荐

