見出し画像

【Docker】MySQLで文字化けしたので対応する

DockerでPHPとMySQL環境構築しています。

「よし、環境できたぞ」と思いDBにテストで登録してみたところ、なんと日本語が文字化けしました。

スクリーンショット 2019-10-11 9.42.35

こちらを対応していきます。


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にデータを入れると文字化けがなおりました。

スクリーンショット 2019-10-11 9.57.19


以上で対応完了です。お疲れ様でした。


GitHubリポジトリ

今回作成したソースはGithubにて公開しています。下記リンクよりご確認ください。(L3ブランチです。)



読んでいただきありがとうございます。