MySQL 的最佳通用字符集和排序规则

GTS*_*Joe 3 mysql database-design collation character-set

目前,每当我创建一个新的 MySQL 数据库时,我都会使用 utf8mb4 作为字符集并使用 utf8mb4_unicode_520_ci 作为排序规则,例如:

CREATE DATABASE IF NOT EXISTS db_name
    DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_520_ci;
Run Code Online (Sandbox Code Playgroud)

是否有更新/升级的 MySQL 通用排序规则或字符集?

例如,如果有一个排序规则取代了 utf8mb4_unicode_520_ci,比如 utf8mb4_unicode_800_ci 或类似的东西?

谢谢你的帮助。

Ric*_*mes 7

对于任何版本的 MySQL 或 MariaDB,使用utf8mb4其默认的COLLATION. (嗯,这在 5.5.3 之前不可用。)

0900 指的是 Unicode 的 9.00。
520 指的是 Unicode 的 5.20。
没有数字是指 Unicode 的 4.00。
(数字越大“越好”。)

对于 postal_code、country_code、十六进制字符串、哈希等列,请考虑使用CHARACTER SET ASCIICOLLATE ascii_general_ci获取大小写折叠。
对于其他一些,例如 BASE64,使用COLLATE ascii_bin因为大小写折叠是“错误的”。

要知道,
在设置上CREATE DATABASE默认CREATE TABLE,和存储程序。
上的设置CREATE TABLE是该表中列的默认值
连接设置对于使事情“正确”也非常重要。


GTS*_*Joe 5

我会回答我自己的问题,希望它能帮助将来的人。通过以下查询,我能够找出我的服务器上可用的最新排序规则是什么:

SELECT COLLATION_NAME, CHARACTER_SET_NAME
FROM information_schema.COLLATIONS
WHERE
    ( CHARACTER_SET_NAME = 'utf8mb4' ) AND
    ( COLLATION_NAME LIKE '%utf8mb4_unicode%' )
ORDER BY COLLATION_NAME;
Run Code Online (Sandbox Code Playgroud)

输出:

+-------------------------------+-----------------------+
| COLLATION_NAME                | CHARACTER_SET_NAME    |
+-------------------------------+-----------------------+
| utf8mb4_unicode_520_ci        | utf8mb4               |
| utf8mb4_unicode_520_nopad_ci  | utf8mb4               |
| utf8mb4_unicode_ci            | utf8mb4               |
| utf8mb4_unicode_nopad_ci      | utf8mb4               |
+-------------------------------+-----------------------+
Run Code Online (Sandbox Code Playgroud)

有了可用的选择,我选择了:

utf8mb4_unicode_520_ci
Run Code Online (Sandbox Code Playgroud)

我想确保没有可用的较新排序规则,例如 utf8mb4_unicode_800_ci。在我的系统上,utf8mb4_unicode_520_ci 是最新的。