はじめに
PowerShellからDocker上のMySQLに接続してテーブル作成を行っていた際、日本語が入力できない(文字化け・入力不可)問題に遭遇しました。
そこで原因と解決方法をまとめます。
発生した問題
以下のような操作をしていたときに問題が発生しました。
PowerShell → Dockerコンテナ → MySQL接続
日本語(例:'山田')を入力しようとすると
- 文字化けする
- 正しく比較できない
- 入力自体が不安定
になってしまいました。
原因
原因ですが、コンテナ内のロケール設定が LANG=C のようなASCIIベースになっている場合、日本語を正しく扱うことができないことにありました。
一方で、PowerShell側はUTF-8を前提とした文字コードで動作しているため、ホスト(PowerShell)とコンテナ間で文字コードの不一致が発生します。
その結果、日本語の入力時に文字化けや不正な動作が起こる原因となっていました。
解決策
コンテナ起動時に以下を追加します。
-e LANG=C.UTF-8
例
docker run -d \
--name mysql-test \
-e MYSQL_ROOT_PASSWORD=root \
-e LANG=C.UTF-8 \
-p 3306:3306 \
mysql:8.0
まとめ
原因:文字コードの不一致(ASCII vs UTF-8)
解決:-e LANG=C.UTF-8 を追加
追加対策:SET NAMES utf8mb4;
思ったより解決に時間を使ってしまいました。