将字符集 utf8mb4 的默认排序规则更改为 utf8mb4_unicode_ci

Pet*_*Wal 6 mariadb collation character-set mariadb-10.3

在不指定字符集或排序规则的情况下创建数据库时,将使用服务器默认值(如预期)。

MariaDB [(none)]> SHOW VARIABLES LIKE '%_server' ;
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| character_set_server | utf8mb4            |
| collation_server     | utf8mb4_unicode_ci |
+----------------------+--------------------+

MariaDB [(none)]> CREATE DATABASE `test-without-charset` ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-without-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_unicode_ci     |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

但是,在CREATE DATABASE-query 中指定字符集时,默认排序规则更改为utf8mb4_general_ci.

MariaDB [(none)]> CREATE DATABASE `test-with-charset` CHARACTER SET utf8mb4 ;
MariaDB [(none)]> SELECT `DEFAULT_COLLATION_NAME` FROM `information_schema`.`SCHEMATA` WHERE `SCHEMA_NAME` LIKE 'test-with-charset';
+------------------------+
| DEFAULT_COLLATION_NAME |
+------------------------+
| utf8mb4_general_ci     |
+------------------------+
Run Code Online (Sandbox Code Playgroud)

我已经发现(mysql-manual

如果在没有 COLLATE 的情况下指定了 CHARACTER SET charset_name,则使用字符集 charset_name 及其默认排序规则。要查看每个字符集的默认排序规则,请使用 SHOW CHARACTER SET 语句或查询 INFORMATION_SCHEMA CHARACTER_SETS 表。

它确实显示了utf8mb4_general_ci,所以它遵守规则

MariaDB [(none)]> SHOW CHARACTER SET LIKE 'utf8mb4';
+---------+---------------+--------------------+--------+
| Charset | Description   | Default collation  | Maxlen |
+---------+---------------+--------------------+--------+
| utf8mb4 | UTF-8 Unicode | utf8mb4_general_ci |      4 |
+---------+---------------+--------------------+--------+
Run Code Online (Sandbox Code Playgroud)

所以我的问题是:如何更改字符集的默认排序规则utf8mb4。有没有我可以更改的配置文件来改变这种行为?我真的希望这两者保持一致。

当然,我试过谷歌找到任何相关的东西,但我能找到的只是改变collation_server-setting。

服务器版本:10.3.15-MariaDB-log MariaDB 服务器

Ric*_*mes 6

我认为没有办法改变这一点DEFAULT

无论如何,最好使用utf8mb4_unicode_520_ci基于后来的 Unicode 标准的 。

只要养成在所有连接 和 上CHARACTER SET指定和 的习惯即可。MySQL和MariaDB正在逐渐从latin1_swedish_ci更改为utf8mb4_0900_ai_ci。MariaDB 还没有出现,但我希望他们很快就会采取行动。而“900”可能不是最后一个 Unicode 标准。COLLATIONCREATE TABLEs

通过显式指定字符集和排序规则,您可以保持控制和一致性,即使它是过时的对。

妥协...

但字符集和排序规则在CREATE DATABASE. 然后,任何没有特定设置而构建的表都将继承这些设置。该表中的列将从表的设置继承。