『SQL ゼロからはじめるデータベース操作』の演習をDocker & MySQLでやろうとして、日本語が入力できない現象につまづいた時のメモです。
##最終的な構成
全部同じ場所に置いてください
docker-compose.yml
version: "3"
services:
mysql:
build:
context: .
environment:
MYSQL_ROOT_PASSWORD: "password"
MYSQL_USER: "root"
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
volumes:
mysql_data:
driver: local
Dockerfile
FROM mysql:5.7
RUN apt-get update
RUN apt-get -y install locales-all
ENV LANG ja_JP.UTF-8
ENV LANGUAGE ja_JP:ja
ENV LC_ALL ja_JP.UTF-8
COPY mysqld_charset.cnf /etc/mysql/conf.d/mysqld_charset.cnf
mysqld_charset.cnf
[mysqld]
character_set_server=utf8
character_set_filesystem=utf8
collation-server=utf8_general_ci
init-connect='SET NAMES utf8'
init_connect='SET collation_connection = utf8_general_ci'
skip-character-set-client-handshake
内容
①Debianのlocaleを設定する
環境変数でlocaleを日本に指定しないとそもそもコマンドラインで日本語を打つことが出来ないようです。
以下の記事を参考に設定します。
[Debian]Debian stretchのDockerコンテナを日本語化する
②MySQLの文字コードをutf8に設定する
今度はMySQL側の設定です、MySQLはデフォルトでlatin1という日本語を扱えない文字コードが設定されているのでこれをutf8に変更します。
コンテナ内部のMySQL設定を変更するには一工夫必要で、設定情報を書いた.cnf
ファイルを/etc/mysql/conf.d/
以下に配置することで設定を反映させます。
この辺はググれば情報が出てくると思うので適宜調べてください。
以下を参考にしました。
dockerのMySQLのutf8文字コードのイメージを作る
最後に
Docker便利ですけど環境変数や設定周りでつまづくことが多くて大変…