mySQLの日本語を読めるように設定する

2025/01/23に公開

日本語だけ文字化けする

+----+-----------+---------+------------+---------------------+---------------------+
| id | team_name | user_id | admin_type | created_at          | updated_at          |
+----+-----------+---------+------------+---------------------+---------------------+
|  4 | ???       |       6 |          0 | 2025-01-22 08:28:29 | 2025-01-22 08:28:29 |
|  5 | ????      |       6 |          0 | 2025-01-22 10:09:43 | 2025-01-22 10:09:43 |
|  6 | ???       |       6 |          0 | 2025-01-22 10:11:22 | 2025-01-22 10:11:22 |
+----+-----------+---------+------------+---------------------+---------------------+

文字コードを登録

mysqlの中に入ります。

./vendor/bin/sail mysql -u root -p

mysqlに文字コードを登録します。

SET NAMES utf8mb4;

これだけで日本語表示になりました。

+----+--------------+---------+------------+---------------------+---------------------+
| id | team_name    | user_id | admin_type | created_at          | updated_at          |
+----+--------------+---------+------------+---------------------+---------------------+
|  4 | テスト1    |       6 |          0 | 2025-01-22 08:28:29 | 2025-01-22 08:28:29 |
|  5 | テスト2 |       6 |          0 | 2025-01-22 10:09:43 | 2025-01-22 10:09:43 |
|  6 | テスト3   |       6 |          0 | 2025-01-22 10:11:22 | 2025-01-22 10:11:22 |
+----+--------------+---------+------------+---------------------+---------------------+

日本語表示を固定にする

上記のやり方だとexitすると表示が戻ってしまいます。なのでymlファイルの修正とmy.cnfファイルを追加して表示を固定することもできます。

my.cnfの作成

Laravelなどのdocker-compose.yamlと同じディレクトリに下記をファイルを追加します。

touch my.cnf

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

[client]
default-character-set = utf8mb4

yamlファイルに追記

mysqlやdbと書かれている中のvolumesにmy.cnfを読み込むように書いておきます。

            - './my.cnf:/etc/my.cnf'

dockerの再起動

下記のコマンドで再起動します。

docker-compose down
docker-compose up -d

mysqlの中で確認してみる

ログインはこれ

./vendor/bin/sail mysql -u root -p

文字コードの確認はこれ

SHOW VARIABLES LIKE 'character_set%';

下記になっていれば成功です。

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

ここまでやっておくと、mySQLからexitしても再ログインしたら日本語のままになっています。

Discussion