所有语言的MySQL排序规则

25

我目前正在开发一个网站,将展示世界上几乎所有语言的内容。但我在选择MySQL中定义最佳排序规则时遇到了问题。

哪种排序规则最好支持所有字符?或者最准确?

或者最好将所有字符转换为Unicode编码?

5个回答

34

被接受的答案是错误的(也许在2009年它是正确的)。

utf8mb4_unicode_ci 是支持各种语言的最佳编码。

推理和支持证据:

您应该使用 utf8mb4 而不是 utf8,因为后者仅支持3字节字符,而您需要支持4字节字符。(参考)

以及

您应该使用 unicode 而不是 general,因为后者无法正确排序。 (参考)


2
谢谢!但是默认为每个数据库/表执行此操作的缺点是什么?它会使用更多的空间,或者与使用默认的mysql设置(我猜是latin1)相比,会使我的查询/搜索效率低下吗? - supersan

23

6
我建议使用 utf8_unicode_ci 而不是 utf8_general_ci。有关Unicode为什么比General更好的更多信息,请参见https://dev59.com/bnRA5IYBdhLWcg3w9izq - Aistis

0

使用utf8mb4代替utf8

utf8mb4_general_ci => support 1, 2, 3 or 4 bytes

并且

utf8_general_ci or utf8mb3_general_ci => support 1, 2 or 3 bytes

它将根据需要占用您磁盘上的空间。


0

来自 MySQL 网站:

utf8mb4: 使用一到四个字节的 UTF-8 编码的 Unicode 字符集。

utf8mb3: 使用一至三个字节的 UTF-8 编码的 Unicode 字符集。这个字符集在 MySQL 8.0 中已经被弃用,应该使用 utfmb4 替代。

utf8:utf8mb3 的别名。在 MySQL 8.0 中,这个别名已经被弃用;请使用 utf8mb4。预计在未来的一个版本中,utf8 将成为 utf8mb4 的别名。

因此,建议使用 utf8mb4。


你的回答可以通过添加更多支持信息来改善。请[编辑]以增加进一步细节,例如引用或文档,以便其他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

0

使用utf8mb4_unicode_ci或utf8mb4_general_ci可能会导致意外行为,需要小心。

请注意。

如果您想避免像下面这个例子一样的情况,也许utf8mb4_unicode_bin是一个不错的选择。

enter image description here


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