Tagbangers Blog

Dockrイメージのmysqlで文字化け

はじまり


ローカル環境を立ち上げる際、DockerのMySQLイメージを使いました。
ところがアプリケーションを起動してみると、ところどころ文字化けが発生して困りました。

しらべる


MySQLの文字コードが適切か確認します。

mysql> show variables like '%char%';
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | latin1                     |
| character_set_connection | latin1                     |
| character_set_database   | latin1                     |
| character_set_filesystem | binary                     |
| character_set_results    | latin1                     |
| character_set_server     | latin1                     |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.01 sec)

MySQLシステム変数値には、デフォルトでlatin1が指定されていました。

今回は、とりあえずUTF-8を設定できれば解決できそうです。

かいけつ


https://hub.docker.com/_/mysql/

The default configuration for MySQL can be found in /etc/mysql/my.cnf

今回は上記cnfファイルを編集しました。

docker container内のファイルへアクセスします。

$ docker exec -ti joseph57 bash
root@5f12c3a4afe5:/# 
root@5f12c3a4afe5:/# vi etc/mysql/my.cnf

そしてこんな感じで指定しました。

[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

この状態で、もう一度システム変数確認すると、utf8がセットできたみたいです。

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

おしまい


イカ、時間があるときに調べたいと思います

  • なぜUTF8なの
    日本語はマルチバイトなのは知ってるけど、マルチバイトって他にもあるはず
  • 各Variable_nameの意味とか
    一部だけutf8にしただけだと文字化け解決しなかったから、全部utf8にしたら解決したよ、みたいな感じなので
  • cnfファイル編集以外にも解決できる方法がある
    compose管理しているプロジェクトは、utf8とか気にしなくても快適な理由がある


所要時間(45ふんくらい)