MySQL で日本語や絵文字を扱えるようにするには、MySQL の文字コードを utf8mb4 にするのが望ましい。
だがデフォルトの設定ではそうなっておらず、立ち上げた後に変更するのが地味に面倒なのでハマることが多い。
なので、データベースを立ち上げる時は自分はいつも、以下の docker-compose をコピペして立てている。
docker-compose.yaml
version: "3"
services:
mysql:
build:
context: .
dockerfile: Dockerfile
environment:
MYSQL_ROOT_PASSWORD: "rootpass"
MYSQL_USER: "testuser"
MYSQL_PASSWORD: "testpass"
MYSQL_DATABASE: "testdb"
ports:
- "3307:3306"
Dockerfile
FROM mysql:5.7-debian
RUN apt-get update && \
apt-get install -y locales && \
rm -rf /var/lib/apt/lists/* && \
echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \
locale-gen ja_JP.UTF-8
ENV LC_ALL ja_JP.UTF-8
RUN { \
echo '[mysqld]'; \
echo 'character-set-server=utf8mb4'; \
echo 'collation-server=utf8mb4_general_ci'; \
echo '[client]'; \
echo 'default-character-set=utf8mb4'; \
echo '[mysql]'; \
echo 'default-character-set=utf8mb4'; \
} > /etc/mysql/conf.d/charset.cnf
この2つを同じディレクトリに置いて、docker-compose up
するだけ。
ポート番号などは用途によって変えること。