Migrating UTF8 to UTF8-MB4 on MariaDB
ブログ記事に絵文字を使いたいので変更してみた。
設定方法
現状の確認。
> show variables like "chara%";
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
設定ファイルの修正。
クライアント・サーバ両方修正する。
mariadbのcnfには以下のようにそれっぽいディレクティブが複数ある。
client.cnf
[client]
[client-mariadb]
server.cnf
[mysqld]
[mysqld-5.5]
[mariadb]
[mariadb-5.5]
違いは設定ファイルのコメントにあるとおりmariadb独自のものは[mariadb]
ディレクティブに書けば良いらしい。互換性のためにあるのかな。基本的に[mariadb]
ディレクティブを使うという方針で良さそう。
こんな感じで設定する。
client.cnf
[client-mariadb]
default-character-set = utf8mb4
server.cnf
[mariadb]
character-set-server = utf8mb4
設定後mariadbをrestartすれば適用される。
> show variables like "chara%";
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
これで絵文字が使えるようになる(使えない絵文字もあった。酒とか)。
Yay!
utf8とutf8mb4の違い
utf8は13バイトを扱える。utf8mb4は14バイトを扱える。ただし、utf8は本来1~4バイトが使える。mysqlでのみの事情。
以下のスライドが参考になった。
参考
以下の検証が分かりやすかった。