1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Docker環境のmysqlで日本語入力ができないときの対処法

Last updated at Posted at 2023-06-23

記事を書くきっかけ

ローカルの開発環境を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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?