XAMPPの文字化け回避メモ

  • 44
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

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

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

参考

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