MySQL5.0の文字化けさえクリアできれば

ハロプロじゃなくてプログラムの話ですみません。
ブログデータ消失の危機のきっかけを作った(汗)昨日の研究から解ったことなんですが、MySQL4.1以降、MySQLが内部的にUTF-8で処理するようになったうえに、クライアントとMySQLの文字コードが違う場合は強制的に変換を行い、SJISなどで扱えない文字コードは「?」に強制的に置き換わるらしい…。

いろいろ試した結果、Windows環境ですが、「skip-character-set-client-handshake」コマンド発動後、MySQLとコネクションを張った直後に「SET NAMES 文字コード」をqueryしておけば、PHP5からMySQLにInsertして、それをSelectしても問題なし。

しかし、phpMyAdminから修正(SQL文直打ちのUpdateではなくフォームからのUpdate)の操作を行おうとすると、SQL文の中に書いてある日本語が文字化け(UTF-8のページにSJISコード)、他にも「影響を受けた行」という文字なども文字化け。
その他の部分は正常に出ていて、Updateも成功しているようなんですが…。

ちなみに、最初phpMyAdminに入ったときは、テーブル一覧などでチェックボックスにチェックを入れて削除とかやると、削除確認も出ずに「正常に実行されました」だけで何も変換なしだった。

結局自分でphpMyAdminのソースを解析しまくって、formから送信されたvalue値の日本語(SJIS扱い?)と実行処理の分岐が並んでいるswitch文の変数に格納されている日本語(UTF-8っぽい)の文字コード違いによってtrueになっていなかったのが原因らしい。
仕方ないので、その部分のちょっと前で強制的にSJISの方をUTF-8に変換したら削除確認が出てくるようになった。

ちょっとこういう状況だとメンテナンス性も低くてまずいから、何とかしたいんですが、どなたか知識をお持ちの方がいらっしゃいましたらアドバイスをお願います。

これさえクリアできれば、MySQL5の入っているサーバーを新たに借りて(年2400円掛かるので、この問題が解決しないと…)そこでハロ探!次期バージョンの作成を進めるつもりです。

『ちなみに現在の環境】
Windows XP
MySQL 5.0.22-community-nt
phpMyAdmin - 2.8.0-rc1
MySQL の文字セット: UTF-8 Unicode (utf8)

PHP Version 5.1.1
mbstring.internal_encoding SJIS

【MySQL変数の文字コード】
character set client utf8
character set connection utf8
character set database utf8
character set filesystem binary
character set results utf8
character set server utf8
character set system utf8
collation connection utf8_general_ci
collation database utf8_general_ci
collation server utf8_general_ci

投稿者:misuken 2006年06月11日 20:56
Search