【XAMPP】データベースから読み込んだTEXT型データの文字化け解決

データベースから読み込んだ日本語のTEXT型データが文字化けしてしまったときの 解決法をまとめておきます。

1. カラムの文字コードをチェック

phpMyAdminでカラムの追加をする場合、照合順序という項目があると思います。
これが文字コードの設定になっています。
デフォルトの場合(何も選択していない)、文字コードが 「latin7_general_ci」に設定されているので、こちらを「utf-8_general_ci」など、 日本語に対応した文字コードに変更します。

すでに追加してしまったデータはここを変更しても直らない場合があります。

2. XAMPPの設定ファイル変更

xampp/phpフォルダにあるphp.iniを設定します。
次の8行のコメントアウトを外し、値を以下のように変更します。

mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = On
mbstring.detect_order = auto
mbstring.substitute_character = none
mbstring.func_overload = 0


続いてxampp/mysqlフォルダを開き、my.iniファイルの変更をします。
「## UTF 8 Settings」とだけ書かれた行があるので、その下にある
次の4行コメントアウトを外します。

collation_server=utf8_unicode_ci
character_set_server=utf8
skip-character-set-client-handshake
character_sets-dir="C:/xampp/mysql/share/charsets


※init-connect=SET NAMES utf8のコメントアウトを外すと、自分の環境では
phpMyAdmminにアクセスした時MySQL server has gone awayエラーが出てしまいました。
あとセキュリティ的にも良くないらしいです。

続いて [client][mysqldump][mysql]という3つのセクションを探して
それぞれ以下のように変更します。

[client]
# password = your_password
port = 3306
socket = "C:/xampp/mysql/mysql.sock"
default-character-set = utf8


[mysqldump]
quick
max_allowed_packet = 16M
default-character-set = utf8


[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set = utf8


最後にmysqlを再起動すれば 文字化けが直っていると思います。

参考にしたサイト

qiita.com