utf8mb4 の使い方

データベースで使用している文字コードを確認する

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       |
| character_set_connection | utf8                       |
| character_set_database   | utf8                       |
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> show variables like 'coll%';
+----------------------+-----------------+
| Variable_name        | Value           |
+----------------------+-----------------+
| collation_connection | utf8_general_ci |
| collation_database   | utf8_general_ci |
| collation_server     | utf8_general_ci |
+----------------------+-----------------+

utf8 は4バイトの Unicode に対応していないため、utf8mb4 に変更して対応する

/etc/my.conf で includedir されている場合

!includedir /etc/my.cnf.d

/etc/my.cnf.d/utf8mb4.cnf を作成

# utf8mb4.cnf

[mysqld]
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4

MariaDB を再起動する

$ sudo systemctl restart mariadb

変更後の確認

mysql> show variables like 'char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8mb4                    |
| character_set_connection | utf8mb4                    |
| character_set_database   | utf8mb4                    |
| character_set_filesystem | binary                     |
| character_set_results    | utf8mb4                    |
| character_set_server     | utf8mb4                    |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+

mysql> show variables like 'coll%';
+----------------------+--------------------+
| Variable_name        | Value              |
+----------------------+--------------------+
| collation_connection | utf8mb4_general_ci |
| collation_database   | utf8mb4_general_ci |
| collation_server     | utf8mb4_general_ci |
+----------------------+--------------------+

参考:

MariaDB で 4バイトの utf を扱う設定 | Balun Software (Info)

mariadb の 「character_set_server」がutf8にならない – スタック・オーバーフロー

Migrating UTF8 to UTF8-MB4 on MariaDB

MySQLの文字コードをutf8mb4に変更(MariaDB)(CentOS7) – すだちWiki

mariadb 文字コードをutf8からutf8mb4へ | 世界を疑え

MySQLのencodingをutf8からutfmb4に変更して寿司ビール問題に対応する – TechRacho

MySQL で utf8 と utf8mb4 の混在で起きること – @tmtms のメモ

Setting Character Sets and Collations – MariaDB Knowledge Base [Official]

寿司ビール問題

寿司とビールが一致してしまう

mysql> select '🍣'='🍺';
+---------+
| '?'='?' |
+---------+
|       1 |
+---------+

絵文字を区別するには collation に utf8mb4_unicode_520_ci を指定する

mysql> select '🍣'='🍺' collate utf8mb4_unicode_520_ci;
+----------------------------------------+
| '?'='?' collate utf8mb4_unicode_520_ci |
+----------------------------------------+
|                                      0 |
+----------------------------------------+

参考:

MySQLの文字コード事情 – SlideShare

mariadbのcollationをutf8mb4 に対応させる | ++頭道++

Setting Character Sets and Collations – MariaDB Knowledge Base [Official]

【MySQL】照合順序とは? – Qiita

MySQLのCollationを理解するためにまとめてみた。 – 6VOX

MySQLの照合順序 – Qiita

utf8_unicode_ci に対する日本の開発者の見解 – かみぽわーる

テーブルやカラムごとに文字コードや照合順序を設定する

参考:

MySQLにインストールされたCHARACTER SETとCOLLATIONの確認方法とカラム別の設定方法 – xmallocのプログラミングノート

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です