はじめに
dockerでローカル開発環境を作る時、大概お世話になるのがmysqlイメージですよね〜
/docker-entrypoint-initdb.d
に初期化のsqlを入れたフォルダをマウントするとdocker起動時に実行してくれるのでほんと便利ですね!
だけど、えー・・文字化けしてるやん!ってことで悩んでるかたはこちらを試してみてください。
やること
dockerを起動する時のコマンドにcharacter-set
とcollation-server
を指定しときましょう
docker-compose.yml
version: '3'
services:
mysql:
image: mysql
command: mysqld --character-set-server=utf8 --collation-server=utf8_unicode_ci
volumes:
- ./docker/mysql:/docker-entrypoint-initdb.d
...
起動時に実行されるsqlでは、先頭でCHARACTER_SET_CLIENT
とCHARACTER_SET_CONNECTION
をしときましょう。
./docker/mysql/create.sql
SET CHARSET UTF8;
CREATE DATABASE IF NOT EXISTS sample_database DEFAULT CHARACTER SET utf8;
USE sample_database;
CREATE TABLE IF NOT EXISTS sample_table(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
updated_at TIMESTAMP
);
./docker/mysql/insert.sql
USE sample_database;
SET CHARACTER_SET_CLIENT = utf8;
SET CHARACTER_SET_CONNECTION = utf8;
INSERT INTO sample_table
(name)
VALUES
('テスト1'),
('テスト2');
これで大丈夫なはず!?