Open2

[MariaDB] 文字セットと照合順序

平田直毅平田直毅

utf8mb4_general_ciを基本にして、必要な部分に対してutf8mb4_uca1400_ai_ciを個別に設定するのがよい。

例えばデフォルト状態では「ハハ」と「ババ」がイコールになる。

MariaDB [my_database]> select 'ハハ' = 'ババ';
+---------------------+
| 'ハハ' = 'ババ'     |
+---------------------+
|                   1 |
+---------------------+
1 row in set (0.000 sec)
平田直毅平田直毅

デフォルトではcharacter_set_collations
utf8mb3=utf8mb3_uca1400_ai_ci,ucs2=ucs2_uca1400_ai_ci,utf8mb4=utf8mb4_uca1400_ai_ci,utf16=utf16_uca1400_ai_ci,utf32=utf32_uca1400_ai_ciになる。
これは使いにくいので空にする。

設定ファイルを追加。

/etc/mysql/conf.d/server.cnf
[mysqld]
character-set-server  = utf8mb4
collation-server      = utf8mb4_general_ci
character_set_collations =
/etc/mysql/conf.d/client.cnf
[client]
default-character-set=utf8mb4

結果はこのようになる。

MariaDB [(none)]> show variables like 'collation_%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+
3 rows in set (0.002 sec)

MariaDB [(none)]> show variables like 'character_%';
+--------------------------+------------------------------+
| Variable_name            | Value                        |
+--------------------------+------------------------------+
| character_set_client     | utf8mb4                      |
| character_set_collations |                              |
| character_set_connection | utf8mb4                      |
| character_set_database   | utf8mb4                      |
| character_set_filesystem | binary                       |
| character_set_results    | utf8mb4                      |
| character_set_server     | utf8mb4                      |
| character_set_system     | utf8mb3                      |
| character_sets_dir       | /usr/share/mariadb/charsets/ |
+--------------------------+------------------------------+
9 rows in set (0.004 sec)

「ハハ」と「ババ」区別されるようになる。

MariaDB [(none)]> select 'ハハ' = 'ババ';
+---------------------+
| 'ハハ' = 'ババ'     |
+---------------------+
|                   0 |
+---------------------+
1 row in set (0.001 sec)