人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

php5.2とmysql5.1.19で質問です。
はずかしながら、以前のコーディングではうまくできたのに今回希望の処理が全く出来なくなってしまいました。
もとのソースがなくなってしまったので、原因を知りたく思います。
(ちなみに、サーバはXREAのものを使っています。)
mysqlのDBをUNICODEで作成して、phpMyAdminからUTF8で開き、テーブルを作成、データを挿入しました。
(データには日本語の全角文字も含まれます。)
そしてphpからmysql_connect->mysql_select_db->mysql_query->mysql_fetch_assocの順に処理して読み取りました。
読み取った日本語の内容をprintfで表示すると、?(はてな)に化けてしまいました。
ブラウザのエンコーディングをSJIS,EUC,JIS,UTF8、どれで表示しても全く同じ?(はてな)です。
そこで、mb_detect_encodingを実施してエンコードを調べてみましたら、なんとASCIIで返ってきました。
UNICODEで作ったはずのDBなのに、なぜASCIIで読み取られてしまうのでしょうか?
ちなみに、PHPの設定は、
mbstring.http_input=auto
mbstring.http_output=pass
mbstring.internal_encoding=UTF-8
です。

●質問者: pkb_wn
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:ASCII dB EUC JIS MySQL
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● b-wind
●100ポイント ベストアンサー

UNICODEで作ったはずのDBなのに、なぜASCIIで読み取られてしまうのでしょうか?

DB設定自体が UTF-8 でもクライアント側の設定しだいで文字コード変換がかかります。


MyNA Web Site

リンク先にあるように、phpMyAdmin と作成したプログラムの両方で

SHOW VARIABLES LIKE 'char%';

を実行してみてください。

おそらく片方、もしくは両方の character_set_client が latin1 などの日本語の使用できない文字コードになっているはずです。


character_set_client が UTF8 になっていないプログラムでは SQL 文の発行前に、

SET NAMES UTF8;

を実行する必要があります。

◎質問者からの返答

有難う御座います。

ご指摘のとおり、ずばりサーバ側がutf8でphpはlatin1でした。

残念ながら、SET NAMES UTF8;でphpもutf8になりましたが全く別の文字化け(全角だけ空白)になってしまい、

mysql_set_charset()が、私が使っているphp5.2.2までがちょうど使えず、5.2.3からしか使えない、ということで

趣味の制作なのでMySQLをやめてPostgreSQLを使おうと思います。

いくらフリー(商用ライセンスまで出たんでしたっけ...)だとはいえ、ずいぶん無謀な仕様変更してくれるものだ...

(MYSQL4のときは普通に動いていたんですよね) すこし感情的な文になってしまって申し訳ないです。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ