Loading [MathJax]/extensions/tex2jax.js

LaradockのMySQLの日本語の文字化けを解消する方法

1644 回閲覧されました

みなさんこんにちは、jonioです。

今回はLaradockのMySQLに接続した時にテーブルの中の日本語が「?」になるのを解消する方法について解説します。

 

show variables like ‘%char%’;

LaradockのMySQLに接続してテーブルを見たら本当は↓にならないといけないのに日本語の部分(早田、山田、田中の部分)が全て「?」になりました。

変だと思いMySQLで「show variables like ‘%char%’;」で言語設定を調べたら↓になっていました。

「latin1」があるのがダメだと思ったので「utf8mb4」に変える事にしました。

 

my.cnf

「laradock > mysql > my.conf」の中に追記をします。

# The MySQL Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
[mysql]
[mysqld]
skip-character-set-client-handshake
character-set-server = utf8mb4
# collation-server = utf8mb4_general_ci
collation-server = utf8mb4_unicode_ci
init-connect = SET NAMES utf8mb4
//ここから追加
[client]
default-character-set=utf8mb4
//ここまで追加
view raw my.conf hosted with ❤ by GitHub

17行目も必ず書いてください、私は書かなくてMySQLに接続ができなくなって焦りました。

 

database.php

「Laravelのプロジェクト > config > database.php」を↓にします。

'mysql' => [
'driver' => 'mysql',
'url' => env('DATABASE_URL'),
'host' => env('DB_HOST', '127.0.0.1'),
'port' => env('DB_PORT', '3306'),
'database' => env('DB_DATABASE', 'forge'),
'username' => env('DB_USERNAME', 'forge'),
'password' => env('DB_PASSWORD', ''),
'unix_socket' => env('DB_SOCKET', ''),
'charset' => 'utf8mb4', //この行を編集
'collation' => 'utf8mb4_unicode_ci', //この行を編集
'prefix' => '',
'prefix_indexes' => true,
'strict' => true,
'engine' => null,
'options' => extension_loaded('pdo_mysql') ? array_filter([
PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'),
]) : [],
]

編集と書いてある行ですが私のLaravelのプロジェクトでは変更後になっていましたがLaravelのバージョンに よっては違うかもしれないので掲載しておきます。

 

変更の反映と確認

ターミナルで「docker-compose up -d –build workspace nginx mysql」と入力してLaradockを立ち上げます。

そしてMySQLに接続して「show variables like ‘%char%’;」で言語を確認したら↓になります。

これでテーブルの「?」だった所が日本語になっているはずです。