【Docker】MySQLで文字化けしたので対応する
DockerでPHPとMySQL環境構築しています。
「よし、環境できたぞ」と思いDBにテストで登録してみたところ、なんと日本語が文字化けしました。
こちらを対応していきます。
MySQLの文字コード確認
取り急ぎ現状の調査です。MySQLで文字コードを確認するため、dockerでMySQLに接続します。
まずはMySQLのCONTAINER IDを確認します。
docker ps
すると、下記のように表示されます。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS
2841600887d9 mysql:5.7 "docker-entrypoint.s…" 6 minutes ago Up 6 minutes 33060/tcp, 0.0.0.0:13306->3306/tcp sp_db_1
この場合、CONTAINER IDは「2841600887d9」となります。下記でコンテナに接続できます。
docker exec -it 2b481d197e49 bash
すると、コンテナに入りますので、下記でMySQLに接続します。
mysql -u root -p
Enter password:
下記コマンド実行します。
show variables like "chara%";
すると、下記のように表示されました。
+--------------------------+----------------------------+
| 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/ |
+--------------------------+----------------------------+
こちらの下記3箇所ですが
character_set_database
character_set_server
character_set_system
latin1になっていますが、こちらをutf8に変更する必要があります。それでは解決していきます。
解決方法:docker-compose.ymlの修正
こちらの文字コードの変更ですが、docker-compose.ymlファイルを修正することで対応できます。
dbの箇所に下記追記してください。
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
まとめると下記のようになります。
db:
image: mysql:5.7
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
ports:
- 13306:3306
volumes:
- ./mysql/data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
こちらに修正し、下記実行すると
docker-compose stop
docker-compose up -d
文字コードが修正されます。
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
これで、再度DBにデータを入れると文字化けがなおりました。
以上で対応完了です。お疲れ様でした。
GitHubリポジトリ
今回作成したソースはGithubにて公開しています。下記リンクよりご確認ください。(L3ブランチです。)
読んでいただきありがとうございます。