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 LANGset 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エンコードなので文字化けしない)

Leave a Comment

入力エリアすべてが必須項目です。メールアドレスが公開されることはありません。

内容をご確認の上、送信してください。

CAPTCHA