ハッキングバカ

プログラミングに関するメモ

Mariadb の文字コードを utf8mb4 に変更する[macOS]

環境: macOS 10.13.6 Mariadb 10.3.10

MariadbRails から絵文字を流し込むとエラーになった。
文字コードを確認。

MariaDB [(none)]>  show variables like 'char%';
+--------------------------+--------------------------------------------------------+
| Variable_name            | Value                                                  |
+--------------------------+--------------------------------------------------------+
| character_set_client     | utf8                                                   |
| character_set_connection | utf8                                                   |
| character_set_database   | utf8mb4                                                |
| character_set_filesystem | binary                                                 |
| character_set_results    | utf8                                                   |
| character_set_server     | utf8mb4                                                |
| character_set_system     | utf8                                                   |
| character_sets_dir       | /usr/local/Cellar/mariadb/10.3.9/share/mysql/charsets/ |
+--------------------------+--------------------------------------------------------+
8 rows in set (0.012 sec)

絵文字を扱うには utf8mb4 にする必要がある。
設定ファイルの include を有効化。

# /usr/local/etc/my.cnf
!includedir /usr/local/etc/my.cnf.d

my.cnf.d 下に設定ファイルを作成。

# /usr/local/etc/my.cnf.d/utf8mb4.cnf
[client-mariadb]
default-character-set = utf8mb4
[mariadb]
character-set-server = utf8mb4

mariadb を再起動して、確認。

MariaDB [(none)]> 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/local/Cellar/mariadb/10.3.10/share/mysql/charsets/ |
+--------------------------+---------------------------------------------------------+
8 rows in set (0.001 sec)

これでよし。
system だけちょっと気分が悪いがこれは変えられないらしい。
無事絵文字を使えるようになった。
ただしすでに作ったデータベースは utf8 のままなので再作成か変換が必要。

参考: Migrating UTF8 to UTF8-MB4 on MariaDB, MariaDB で 4バイトの utf を扱う設定 | Balun Software (Info)