1.開発環境
laravelSail バージョン11
WSL2 ubuntu Windows11
MySQL 8.0
2.事前確認
Laravel sail環境にてMySQLで日本語が文字化けするとき文字コードを変更するためには、my.cnfファイルを作成する必要があります。
まずは、今の文字コードを確認しておきましょう。
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
8 rows in set (0.01 sec)
character_set_client |
character_set_connection
character_set_results
この3つをutf8mb4に変更していきます
3.dockerfileでSail環境を独自にカスタマイズできる
Sailはdocker-composeを利用してDockerコンテナを起動し、開発環境を立ち上げています。
DockerコンテナはDockerfileによって開発環境の設定を変更することができます。
sail artisan sail:publish
sail:publishを実行するとアプリケーションルートにdockerというディレクトリが作られます。
Dockerディレクトリ内にあるDockerファイルをカスタマイズすることによって内容を反映することができます。
docker/
├── 8.1/
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supevisord.conf
├── 8.2/
│ ├── Dockerfile
│ ├── php.ini
│ ├── start-container
│ └── supevisord.conf
└── 8.3/
├── Dockerfile
├── php.ini
├── start-container
└── supevisord.conf
4.my.confファイルの作成
docker-compose.ymlのservices.laravel.test.build.contextを見ると私の環境では./docker8.3となっていました。
services:
laravel.test:
build:
context: ./docker/8.3
dockerfile: Dockerfile
バージョンは各々の環境で読み替えてください。
今回はdocker/8.3ディレクトリにmy.cnfファイルを作成します。
services:
[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin
[client]
default-character-set = utf8mb4
これをMySQLの設定ファイルとして、MySQLコンテナの/etc/に配置するようにdocker-compose.ymlに追記します。
#省略
mysql:
image: 'mysql/mysql-server:8.0'
ports:
- '${FORWARD_DB_PORT:-3306}:3306'
environment:
MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}'
MYSQL_ROOT_HOST: '%'
MYSQL_DATABASE: '${DB_DATABASE}'
MYSQL_USER: '${DB_USERNAME}'
MYSQL_PASSWORD: '${DB_PASSWORD}'
MYSQL_ALLOW_EMPTY_PASSWORD: 1
volumes:
- 'sail-mysql:/var/lib/mysql'
- './docker/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh'
+ - './docker/8.3/my.cnf:/etc/my.cnf'
5.反映されているか確認
sail down でコンテナを停止、sail up -d で再起動します。
MySQLコンテナに入ります。
sail mysql
mysql> SHOW VARIABLES LIKE 'character%';
+--------------------------+--------------------------------+
| Variable_name | Value |
+--------------------------+--------------------------------+
| character_set_client | utf8mb4 |
| character_set_connection | utf8mb4 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8mb4 |
| character_set_server | utf8mb4 |
| character_set_system | utf8mb3 |
| character_sets_dir | /usr/share/mysql-8.0/charsets/ |
+--------------------------+--------------------------------+
文字コードを変更することができました。