Happy Man

mash-uppy

14  06 2007

PHP MySQL 文字化け

昨日は、久々に文字化けではまってしまった。

あるデータをDBにぶち込むためのPHPスクリプトだったんだけど、なぜか登録されたデータが全て文字化け。

元のファイルはSJISで、DBはUTF-8。

いつもどおりの変換処理をしていつもどおりのDB処理をしてるのに、なぜか文字化け。

取り出し方がおかしいのかと見てみてもそれでも問題なし。

らちがあかないので、腰をすえて見て見る事に。

まず、インプットファイル。どこをどう見ても、普通のWindows製のSJISのCSVファイル。

でも、何がおきてるかわからないので、秀丸を使ってファイル段階でUTF-8に変換。

駄目。

じゃあ、DBにぶち込む際になにか変なことしてないかと思い、SQL発行直前の文字列をダンプしても、これは全然化けていない。

ということは、やっぱり取り出しがおかしいのかなと思い、取り出し直後の文字列 をダンプすると、既に化けている。回復不能。化けてるのに、mb_detect_encodingってやると「UTF-8」だそうな。

ためしに、phpMyAdminから直接テーブルにデータを幾つか入力して出力してみると、きれいに文字化けせずに出てくる。

自力で解決できないので、Google。

なんだか、MySQL5はよく文字化けするらしい?MTで?

まぁ、だからといってMySQL4にしたくもなかったので、とりあえず5の最新版をダウンロードしてきて、MySQLを再インストール。

やっぱり、駄目。

ということは、DBアクセスに使っている、PEAR::MDB2の問題しかないな!と適当に結論づけて、昨日は終了。

・・・

で、家に帰って色々考えてみたけど、MDB2がおかしかったら、他の アプリもおかしいはずなのに、なんで今回だけなんだろう???

・・・

・・・

・・・

!!!

もしかして、コマンドラインからスクリプト走らせているから?マジで?

・・・

ということで、今朝ブラウザからスクリプト起動したら、あら不思議、

文字化けしやがらねーの。

これって、常識なんでしょうか?

これからちょっと調べてみたいと思います。


Leave a Reply

« twitter api 考 つづき PHPでBasic認証 »