ローカル開発環境でPHPからMySQLのデータを取り出して表示させたら、日本語が文字化けしていた。
よくある事ですね。
やれやれ、文字コードの設定をせねばならぬ。
後々、さくらのレンタルサーバーにアップするつもりなので、そちらの文字コードに合わせようかと思う。
さくらのレンタルサーバーの仕様
http://support.sakura.ad.jp/manual/rs/tech_server.html
これによるとPHPもMySQLもEUC-JP(ujis)がデフォルトのようです。
よし、じゃあやるか。まずはMySQLから。
my.cnfの置き場所を調べる。
$ /usr/local/mysql/bin/mysql --help
helpの中ほどくらいに、下記の記述が見つかる。
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf
つまりこの4つのどこかにあればいいらしい。上から順に読み込まれるみたい。
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
今回は/etc/my.cnfに置く事にした。
/etc/my.cnfが存在しなかったので、下記の場所からコピーして編集。
$ sudo cp /usr/local/mysql/my.cnf /etc/
$ sudo vi /etc/my.cnf
[mysqld]の下に追加。
# MySQLサーバーの文字コードをEUC-JP(ujis)に設定
character-set-server = ujis
# クライアント側の文字コードが設定されていない場合はサーバー側の文字コードを使用
skip-character-set-client-handshake
MySQLを再起動。
設定が反映されているか調べる
$ /usr/local/mysql/bin/mysql -u root -p
mysql> show variables like 'char%';
結果
character_set_system以外はujisになっていますね!
character_set_systemはutf8のままでいいらしい。
次はPHPの文字コードを設定する。
こちらはMySQL接続後に下記のコードを入れるだけ。
mysqli_set_charset($db, "ujis");
あとはデータベースのテーブルを作り直したりするなりPHPのソースコードをEUC-JPで保存するなりなんなり。
私はこれで止めました。(文字化けを)