將字元集 utf8mb4 的預設排序規則更改為 utf8mb4_unicode_ci
在不指定字元集或排序規則的情況下創建數據庫時,將使用伺服器預設值(如預期的那樣)。
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 和 collation on
CREATE DATABASE
. 然後,任何沒有特定設置的表都將繼承這些設置。該表中的列將從表的設置繼承。