MYSQLの文字コードをutf8mb4に変更する

 寿司ビール問題の対策と、今後業務で同じ作業を行うときの練習も兼ねて開発環境でやってみたけど、だいぶ苦労したのでメモを残す。

開発環境

  • VirtualBox
  • Vagrant
  • Ubuntu16.04
  • PHP7.2
  • MySQL5.7 .25

苦労したところ

 MYSQLの設定ファイルが何個もあってどれを編集すればいいのかわからないし、変更しても一部だけ適応されてるみたいな現象が起きた。

解決方法

 まずはMySQLがどの設定ファイルを読んでいるか確認。

vagrant@ubuntu-xenial:~$ sudo mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf 

 /etc/my.cnf と、/etc/mysql/my.cnf と、~/.my.cnf(マイディレクトリ直下:私の環境では /home/vagrant/ となる)を読み込んでいるみたい。
 これらのうち、/etc/my.cnf と ~/.my.cnf は私の環境には存在していなかったので、
/etc/mysql/my.cnf のみ見ていけばいいと候補を絞れた。さっそくこのファイルを見てみると、コメントアウトされている箇所以外は下記のみ

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

 指定したディレクトリ以下の設定ファイルを読み込んでいる。
 /etc/mysql/conf.d/ 以下には mysql.cnf と mysqldump.cnf があるが、
mysql.cnf は空で、dumpのほうは今回はスルーなので、/etc/mysql/mysql.conf.d/ に絞られる。
 /etc/mysql/mysql.conf.d/ 以下には、mysqld.cnf と mysqld_safe_syslog.cnfが存在している。syslogのほうは今回はスルーするとして、mysqld.cnf ファイル内に色々と設定が書いてあった。
 まず、[mysqld]の記述の最後に二つ追加する。

character-set-server = utf8mb4
collation-server = utf8mb4_bin

 ついでに、この設定ファイルの最後にクライアントの設定も足しておく。

[client]
default-character-set = utf8mb4

 後はMYSQLを再起動、ログインして確認してみる。

mysql> show global 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/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

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/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

mysql> select @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_bin          |
+--------------------------+----------------------+
1 row in set (0.00 sec)

 やったぜ。

コメント

タイトルとURLをコピーしました