所有语言的 MySQL 排序规则

Posted

技术标签:

【中文标题】所有语言的 MySQL 排序规则【英文标题】:MySQL collation for all languages 【发布时间】:2010-11-29 20:48:17 【问题描述】:

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

哪一个最能支持所有角色?还是最准确的?

或者最好将所有字符转换为 unicode?​​p>

【问题讨论】:

【参考方案1】:

我通常使用 8 位 UCS/Unicode 转换格式,它适用于任何(以及大多数)语言

utf8_general_ci

http://dev.mysql.com/doc/refman/5.0/en/charset-unicode.html

【讨论】:

我想建议使用 utf8_unicode_ci 而不是 utf8_general_ci。有关为什么 unicode 优于一般的更多信息@***.com/questions/766809/…【参考方案2】:

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

utf8mb4_unicode_ci 是用于广泛语言支持的最佳编码。

推理和支持证据:

您想使用utf8mb4 而不是utf8,因为后者仅支持 3 字节字符,而您希望支持 4 字节字符。 (ref)

您想使用unicode 而不是general,因为后者从未正确排序。 (ref)

【讨论】:

谢谢!但是默认情况下为每个数据库/表执行此操作有什么缺点?与使用默认 mysql 设置(我猜是 latin1)相比,它是否使用更多空间或会使我的查询/搜索效率低下【参考方案3】:

使用 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

它会根据需要占用你的磁盘空间。

【讨论】:

【参考方案4】:

使用 utf8mb4_unicode_ci 或 utf8mb4_general_ci 可能会很棘手并导致意外行为。

注意。

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

【讨论】:

以上是关于所有语言的 MySQL 排序规则的主要内容,如果未能解决你的问题,请参考以下文章

当所有排序规则都已经标准化时,Mysql 非法混合排序规则

SQL Server转换数据库的排序规则

SQL Server 与 MySQL 的 unicode_ci 排序规则的类似物是啥?

创建自定义 MySQL 排序规则

mysql字符集问题,及排序规则

修改mysql所有表排序规则