web関連
【Windows Docker】mysqldumpしたら文字化けした
dockerのmysqlコンテナにmysqldumpかけたら、sqlが文字化けした時の備忘録。
文字化けした
以下のようなコマンドをwindowsのvscode上のターミナルで叩き、docker上のmysqlコンテナからsqlファイルをローカル環境にダウンロードした。そしたら文字化けを起こした。
docker exec -it docker_mysql_container mysqldump -u root --password=password docker_mysql_database > local/backup.sql
以下試したが文字化けは治らなかった。(備忘録)
- windowsのCLIはデフォルトで
932(Shift JIS)
なので65001(UTF-8)
に変更。(変更方法はこちら) - デフォルト文字セット
--default-character-set=utf8mb4
を追加してダンプ。
(記述例:「docker exec -it docker_mysql_container mysqldump -u root –password=password –default-character-set=utf8mb4 docker_mysql_database > local/backup.sql」
他に、mysql -u root -p
でMySQL内に入りshow variables like "chara%";
などを使い設定を確認したり、my.cnf
を確認したり、set LANG
やset LC_ALL
でローカル環境のエンコーディング確認したりするが特に問題は無いように見えた。
文字化けの原因
mysqldumpで文字化けする原因は、vscodeの「ターミナル」に使われている「PowerShell(5系)
」だった。
※(「$PSVersionTable」コマンドでPowerShellのバージョン確認ができる。)
WindowsにはPowerShell 5
がデフォルトでインストールされており、vscodeのターミナルにもデフォルトでPowerShellが使用される。そして、PowerShell 5ではUnicode UTF-16LE エンコードが使用されるらしく、これが原因のよう。(確かにダンプ後にsqlファイルがUTF-16LEになってて不思議だった。)
▼参考
https://zenn.dev/kudosho/articles/266905016636df
文字化けの解決方法
なので、以下のような対応で文字化けは回避できた。
- PowerShellではなく
コマンドプロンプト
を開いてmysqldumpを実行。 - 最新のPowerShellをインストールし実行。(7.1以降は
utf8NoBOM
エンコードなので文字化けしない)