• ベストアンサー

PHP と Mysql の連携時に発生する漢字の文字化け

宜しくお願いします。 1.PHPプログラムからMYSQLにデータを書き込んだ際、結果をコマンドプロンプトで見ると漢字が文字化けしてしまいます。 2.また、コマンドプロンプトから直接同じ命令を打ち込んだ場合は、漢字の値だけがテーブルに挿入(insert)されません。または、結果は挿入されているが、表示されていないだけだという可能性もあります。  しかし、結果をphpMyAdminから見ると、前者は期待通りの値、つまり漢字が挿入されているようです。後者は、phpMyAdminから見ても相変わらず、何も挿入されていないように見えます。  文字コード設定は、utf8にしました(画像添付)。  この問題にはとても手こずっています。昨日一日をこの問題のために費やし、今日も潰れそうです。しかし、どうしても途中放棄したくありませんので、お力を貸し頂けないでしょうか。  説明不足な点がございましたら、どんどん補足説明を要求してください。以下に保持している情報・状況をできるだけ詳しく書かせていただきました。重複する部分もあるかもしれませんが、その点はお許しください。ご回答をお願いします・・・。 <<PHPプログラムソース>> このプログラムは、phpユーザ,passパスワードでlocalhostにアクセスし、php_sample_databaseデータベースに接続後、カラム(id<primary key>)と(name)からなるテーブルを作成します。その後、作成したテーブルに漢字を含む値を入力します。今回発生している問題は、この処理に際して生じていると思われる「漢字の文字化け」です。 <?php $createGender = <<<DDL create table gender (id int primary key, name varchar(32) ) DDL; $conn = mysql_connect("localhost","root","pass"); mysql_query("set names 'utf8'",$conn); echo "SET NAMES utf8★" . mysql_client_encoding(). "<br>"; mysql_set_charset("utf8",$conn); echo "mysql_set_charset★" . mysql_client_encoding() . "<br>"; #上は、クライアント文字コードの実験 mysql_select_db("php_sample_database",$conn); mysql_query($createGender,$conn); mysql_query("insert into gender (id, name) values (1,'男性')",$conn); mysql_query("insert into gender (id, name) values (2,'女性')",$conn); mysql_close($conn); echo '初期化終了<br>'; ?> <<PHPプログラムの実行結果―ブラウザ画面>> SET NAMES utf8★latin1 mysql_set_charset★utf8 初期化終了 ※ブラウザは正常に表示されます。文字化けはありません。 <<PHPプログラムの実行結果―コマンドプロンプト画面>> ※詳細は、画像を添付させていただきます。 --------- id |name --------- 1 |漢字の文字化け 2 |漢字の文字化け --------- <<PHPプログラムの実行結果―phpMyAdmin画面>> 画像の左側に添付させていただきました。 <<コマンドプロンプトで実行した結果>> ※PHPと全く同じ命令のうち、テーブル作成に関する部分のみをコマンドプロンプトから入力した結果・・・下図のようにname欄が空白になりました。つまり、漢字部分だけが表示されなかったことになります。 --------- id |name --------- 1 | 2 | --------- <<コマンドプロンプトで実行した結果―phpMyAdmin画面>> 画像の左側に添付させていただきました。 <<使用している環境・バージョン情報>> OS:Windows vista Home premium xampp:1.6.8 apache:2.2.9 mysql:5.0.67-community-nt phpmyadmin:2.11.9.2 php:5.2.6 申し遅れましたが、私は、PHPとMYSQLをセットで勉強し始めたばかりのひよっこです。 長くなってしまい、申し訳ありません。どうぞ宜しくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • denbee
  • ベストアンサー率28% (192/671)
回答No.1

コマンドプロンプトの文字コードは、デフォルトでシフトJISですから、 MySQLの文字コードがUTF-8で設定されている場合に、 コマンドプロンプトからアクセスすれば当然文字化けします。 コマンドプロンプトの文字コードの設定を換えれば文字化けは解消されると思います。 http://fdays.blogspot.com/2008/01/windows.html

bb2318bb
質問者

お礼

早速ご回答いただき、有難うございます。 確かに文字の雰囲気は変わったのですが・・・残念ながら、再度テーブルを作成し直しても文字化け症状は改善されませんでした。 ※文字化けの内容は、変わりました。最初にご相談させていただいた時の状態は、漢字とカタカナが混じったような文体でした。しかし文字コードを変更した今の文字化けの状態は、神秘的なギリシア文字のような雰囲気です・・・。

その他の回答 (1)

  • DrSumire
  • ベストアンサー率39% (264/666)
回答No.2

私も文字コードのトラブルに毎回なやまされます・・・ OSのキャラクタセット、MySQLデフォルトのキャラクタセット、テーブルのキャラクタセット、MySQLコネクションのキャラクタセット、PHPのキャラクタセット、webサーバのデフォルトキャラクタセット、htmlソースのキャラクタセット、htmlタグのキャラクタセット、ブラウザのキャラクタセットなど・・・・ これらをすべて意識していないと、この場合は出るけどこれだけ出ないとか、mb_convert_encodingの指定をSJISとUTF8を出る方に調整するとかカオスに陥ります。 Linuxなどの知識があれば、VMwareServerで開発用のLinuxGuestを立ち上げてすべてUTF8で統一してしまうのがお勧めです。 あとはMySQLのサイトでMySQL Administratorを使ってデータベースのキャラクタセットを調べたり、MySQL Query Browserで表示できるか確認するのがよいです、phpMyAdmin等は上に列挙した項目に左右されてしまうので自分の環境ならうまくいく事も多く原因を探るのに邪魔になることもありますよ。 知り合いは動けば良いタイプで、同じプロジェクトでもソースのキャラクタセットが異なっていたり、mb_convert_encodingとかset names をその場その場で使い分けているので、改造の度にどこかが文字化けしたりしてとても苦労しています、統一すればと言っても「今更めんどくさい」と言うのですが、私からすれば改造したら全体を確認する方が面倒だとおもうんですけどね。

bb2318bb
質問者

お礼

アドバイスいただき、有難うございます。 コマンドプロンプト側だけで文字化けしていて、プログラムからデータベースへの値の書き込みは成功しているようです。今回の件は、コマンドプロンプトを使った開発がやりづらくなりますが、無視してもいい程度の問題なのでしょうか・・・?