Edited at

XAMPPの文字化け回避メモ


はじめての開発環境作りで初っ端詰まった

PHPとMySQLを使いたいとWindows7に XAMPP ver3.2.1 とやらをインストール。

意気揚々とMySQLに書き込んでみたら、日本語が全部「???」になってしまった。

文字コードがUTF-8で統一されていないのが原因らしい。

ので、PHPの設定とMySQLの設定をひとつずつ修正することにした。


解決方法


設定が必要なファイルの場所


  • XAMPPのコントロールパネルを開いて「Apache」の Config ボタン → <Browse> PHP → 開いたフォルダの中の php.ini

  • XAMPPのコントロールパネルを開いて「MySQL」の Config ボタン → <Browse> → 開いたフォルダの中の bin フォルダ → my.ini

my.ini は昔のXAMPPだと名前が違っていたらしく、随分と詰まった。


php.ini の設定


  • 以下の8つを探して、それぞれ文頭の ; を外す。


php.ini

;mbstring.language = Japanese

;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none
;mbstring.func_overload = 0



  • mbstring.internal_encoding = EUC-JPmbstring.internal_encoding = UTF-8 に直す


  • mbstring.http_output = SJISmbstring.http_output = UTF-8 に直す


  • mbstring.encoding_translation = Offmbstring.encoding_translation = On に直す

  • 以下みたいな感じに仕上がる。(実際はそれぞれの行間に色々入ってるけど)


php.ini

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


my.ini の設定



  • ## UTF 8 Settings を探して、その下5行の文頭の # を外す。


  • init-connect=\'SET NAMES utf8\'init-connect=SET NAMES utf8 にする。

  • 以下みたいな感じに仕上がる。


my.ini

## UTF 8 Settings

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



  • [client] [mysqldump] [mysql] を探してそれぞれ default-character-set = utf8 を追加

  • 以下みたいな感じに仕上がる。


my.ini

[client]

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


my.ini

[mysqldump]

quick
max_allowed_packet = 16M
default-character-set = utf8


my.ini

[mysql]

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


  • その後MySQLを再起動。

  • 既に作ってあるテーブルには反映されないみたいなので作りなおす。

  • その時のテーブルの文字コードは utf8-general_ci などのUTF8の物を選ぶ。


参考

ありがとうございました。