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 或类似的东西?
谢谢你的帮助。
对于任何版本的 MySQL 或 MariaDB,使用utf8mb4
其默认的COLLATION
. (嗯,这在 5.5.3 之前不可用。)
0900 指的是 Unicode 的 9.00。
520 指的是 Unicode 的 5.20。
没有数字是指 Unicode 的 4.00。
(数字越大“越好”。)
对于 postal_code、country_code、十六进制字符串、哈希等列,请考虑使用CHARACTER SET ASCII
和COLLATE ascii_general_ci
获取大小写折叠。
对于其他一些,例如 BASE64,使用COLLATE ascii_bin
因为大小写折叠是“错误的”。
要知道,
在设置上CREATE DATABASE
是默认了CREATE TABLE
,和存储程序。
上的设置CREATE TABLE
是该表中列的默认值。
连接设置对于使事情“正确”也非常重要。
我会回答我自己的问题,希望它能帮助将来的人。通过以下查询,我能够找出我的服务器上可用的最新排序规则是什么:
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 是最新的。