LoginSignup
0
0

Laravel sail MySQLで日本語が文字化けした

Last updated at Posted at 2024-04-20

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となっていました。

docker-compose.yml
services:
    laravel.test:
        build:
            context: ./docker/8.3
            dockerfile: Dockerfile

バージョンは各々の環境で読み替えてください。
今回はdocker/8.3ディレクトリにmy.cnfファイルを作成します。

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/ |
+--------------------------+--------------------------------+

文字コードを変更することができました。

0
0
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
0
0