哪种utf8排序规则是最好的?

27

我希望支持UTF8排序规则,以支持以下语言:

  • 英文
  • 波斯语
  • 阿拉伯语
  • 法语
  • 日语
  • 中文

UTF8_GENERAL_CI是否支持所有这些语言?


没有一个最好的答案!“排序”是指排序,而不是收集。每种语言都必须适当地进行排序。虽然可能有几种方法可以对法语进行排序,但法语的排序并不比中文的排序更好。这就像哪个更好,苹果还是橙子?对此没有最佳答案。 - Elliptical view
2个回答

41

是的,没错。UTF-8 是 Unicode 字符集的一种编码方式,支持世界上几乎所有的语言。

我认为唯一的区别在于对结果进行排序时可能会有不同的字母顺序(例如重音符号、分音符等)。此外,在另一种排序规则下,比较 aä 的行为可能会有所不同。

_ci 后缀表示排序和比较是大小写不敏感的。

http://www.collation-charts.org/ 对您可能会感兴趣。


2
非常感谢你,伙计 :) 还有一个问题: 你的意思是如果我选择utf8_general排序规则,那么在英语、波斯语或其他语言中对记录进行排序会有问题吗? - armin etemadi
2
英语和法语应该基本相同,但我不确定其他语言(波斯语、阿拉伯语、日语、中文)是否也是如此,因为它们不使用普通的英文字母。你希望它们如何排序?在英文字母之后、之间还是之前?你明白我的意思吗? - knittl
1
排序规则可以在数据库/表创建后更改,因此如果排序出现问题,选择不同的排序规则并不是真正的问题。但我想它会按照您的意图工作。 - knittl
1
@knittl:排序规则始终与排序有关。因此,您的答案有点绕过了问题,这很遗憾,因为这个问题在谷歌上很容易找到... :/ - hakre
1
"_ci" 后缀表示排序和比较时不区分大小写。 - felwithe
显示剩余3条评论

8
作为一种良好的决策,UTF8_GENERAL_CI 曾经是一个不错的选择。但现在它存在一些缺点。
MySQL 的 UTF8 实际上使用了三个字节而不是四个字节,这对于像表情符号和新亚洲字符等符号是必须的。
因此,MySQL 有一个更新的字符集叫做 utf8mb4,它实际上符合 UTF8 定义。 如果您希望完全支持亚洲语言,则需要选择 utf8mb4。 如果您关心多语言下正确的排序,请使用 utf8mb4_unicodeutf8mb4_unicode_ci 而不是 general。
更详细的答案可以在What's the difference between utf8_general_ci and utf8_unicode_ci找到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接