LaravelのMySQLで文字コードを調べる & utf8にする方法

LaravelのDBが登録しても文字化けしてしまうことがあったので、その対処方法。

show variables like '%char%';


実行結果

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


latin1 は文字化けするのでutf8に変更する。

#dockerディレクトリが作成される。
sail artisan sail:publish

ドキュメントルートのdocker-compose.ymlを見てみる。

services:
    laravel.test:
        build:
            context: ./docker/8.1
.
.
.

上記のバージョンに対応したフォルダにmy.cnfというファイルを作成し、以下のように記述。

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_bin

[client]
default-character-set = utf8mb4


docker-compose.ymlに追記。

services:
    laravel.test:
.
(中略)
.
        mysql:
        .
       (中略)
        .
            volumes: 
                    - 'sail-mysql:/var/lib/mysql'
                    - './docker/8.1/my.cnf:/etc/my.cnf' #この1行を追記
.
.
.

Laravel sailを再起動

sail down
sail up -d

再びMySQL文字コードを調べてみる。

sail mysql 
show variables like '%char%';


実行結果

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

utf8になっていたらOK!!