XOOPSとphpMyAdminに関するMySQLの文字コード
文字化けの嵐でわけのわからないことになりましたが、ようやく解決できたのでメモっときましょう。文字コードまわりは設定すべき個所が多く複雑なので、ネットで調べても同一環境の人に出会える可能性が低く結局自己解決しなければいけないことが多いような気がします。
FedoraCore5
MySQL 5.0.27
phpMyAdmin 2.10.0.2
PHP 5.1.2
XOOPS 2.0.16a JP
とりあえず適当に設定してXOOPSとMySQLを入れたところ動くことにはすぐ動きます。しかし、データベースのバックアップやテーブルを直接編集するなどの作業ができたほうが良いと思い、phpMyAdminを入れてみたところ、テーブル内の日本語データが完全に文字化けしてしまったので設定を変更して、データベースを作り直したわけです。
システムに関する文字コード
Fedoraのシステム文字コード:utf-8
PHPの内部コード:euc-jp
XOOPSソースの文字コード:euc-jp
基本的にPHPをeuc-jpで動かしているので、データベースもeuc-jpにします。MySQLのデータベースに関する設定ファイル/etc/my.cnfを編集して、default-character-setをujis(euc-jp)にします。skip-character-set-client-handshakeを設定に加えるとデータを返す時にクライアントにdefault-character-setの文字コードでデータを返してくれるそうです。
[client] default-character-set = ujis [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 default-character-set = ujis skip-character-set-client-handshake [mysql.server] user=mysql basedir=/var/lib [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid [mysqldump] default-character-set = ujis [mysql] default-character-set = ujis
設定を変えてからmysqldを再起動してデータベースを作ります。phpMyAdminがインストール済みであれば照合順序をujis-japanese_ci*1にしてデータベースを作ります。作った後にshow variables like 'char%';で文字コードの確認。
+--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | ujis | | character_set_connection | ujis | | character_set_database | ujis | | character_set_filesystem | binary | | character_set_results | ujis | | character_set_server | ujis | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+
これでどうにか動きましたが、MySQLに関してわからないことが多すぎてかなりあてずっぽうな感じです。すべての設定箇所で同じ文字コードにすればなにも問題は起きないんですが、そうできない場合が多々あるのでややこしいんですよね。
これでようやく本題に入れる・・。
*1:utf8-general_ciでも問題ないようですしこの設定項目もよくわからないですね・・