Mariadb

將字元集 utf8mb4 的預設排序規則更改為 utf8mb4_unicode_ci

  • June 7, 2019

在不指定字元集或排序規則的情況下創建數據庫時,將使用伺服器預設值(如預期的那樣)。

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     |
+------------------------+

但是,在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     |
+------------------------+

我已經發現(mysql-manual

如果 CHARACTER SET charset_name 未指定 COLLATE,則使用字元集 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 |
+---------+---------------+--------------------+--------+

所以我的問題是:如何更改字元集的預設排序規則utf8mb4。是否有一些配置文件可以更改以更改此行為?我真的希望這兩個保持一致。

當然,我嘗試Google查找任何相關內容,但我能找到的只是更改collation_server-setting。

伺服器版本:10.3.15-MariaDB-log MariaDB Server

我認為沒有辦法改變這種情況DEFAULT

無論如何,最好使用utf8mb4_unicode_520_ci基於更高版本的Unicode標準的 。

只需養成在所有連接CHARACTER SET和. MySQL 和 MariaDB 正在逐漸從 latin1_swedish_ci 變為 utf8mb4_0900_ai_ci。MariaDB 還沒有,但我希望他們很快就會遷移。而“900”可能不是最後一個 Unicode 標準。COLLATION``CREATE TABLEs

通過顯式指定字元集和排序規則,您可以保持控制和一致性,即使它是過時的對。

妥協…

但是 charset 和 collat​​ion on CREATE DATABASE. 然後,任何沒有特定設置的表都將繼承這些設置。該表中的列將從表的設置繼承。

引用自:https://dba.stackexchange.com/questions/239975