記事を書くきっかけ
ローカルの開発環境をDockerで構築後、早速生成したテーブルにデータを登録しようとしたところ、日本語の情報が登録されない。
また、手入力ができない(Enterを押すと日本語が消えてしまう)状態になっていた。
$ docker-compose exec db bash
$ mysql -u root -p myapp
Enter password:****
mysql> 日本語 /*←Enterを押すと文字が消えてしまう。すなわち日本語の入力ができない*/
原因と対処法
mysqlが以下の状態であることが原因である。
- databaseの文字コードが対応していない
- 日本語環境を追加していない
今回はDockerで環境構築をしているため、DB用のDockerfileに上記の設定を追加する。
修正後の各種設定ファイル
- Dockerfile
ARG MYSQL_VERSION=8
FROM mysql:${MYSQL_VERSION}-debian
COPY my.cnf /etc/mysql/conf.d/my.cnf
# 日本語環境を追加
RUN apt-get update && apt-get install -y locales \
&& sed -i -e 's/# \(ja_JP.UTF-8\)/\1/' /etc/locale.gen \
&& locale-gen \
&& update-locale LANG=ja_JP.UTF-8
ENV LANG=ja_JP.UTF-8
# ここまで
CMD ["mysqld"]
- docker-compose.yml
docker-compose.yml
db:
build: db # 上記Dockerfileの存在するパスを指定
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
解説
- apt-get update パッケージ管理のapt-getに必要な情報を取得
- apt-get install -y locales locales(多国語サポート用ライブラリ。日本語を扱うために必要なもの)インストール
- sed -i -E ‘s/# (ja_JP.UTF-8)/\1/’ /etc/locale.gen locale.gen上のja_JP.UTF-8がデフォルトでコメントアウトされているので、コメントアウトを解除する
- locale-gen localedef(localesの環境変数の定義のファイルを変更するコマンド)を呼び出すシェルスクリプト。
- update-locale LANG=ja_JP.UTF-8 localesの環境変数をja_JP.UTF-8に設定する。
- ENV LANG=ja_JP.UTF-8 ja_JP.UTF-8 を利用する宣言をする
参考
https://qiita.com/tomo__x_/items/bd5d86d5f423f8f89b22
https://qiita.com/sun33/items/398479ba586e39dcee13