
いつもお世話になっています。
今回、phpでmysqlに接続したのですが、mysqlから引っ張ってきたデータが文字化けして困っています。(日本語のみ文字化け)
使っている環境は以下の通りです。
IIS6.0
PHP 5.0.4
MySQL 4.1.22
IISは、CGI、ASP、ISAPIを許可にしています。(.phpを見れるようになっています。)
php.iniのmbstringの設定は以下のようになっています。
1105 mbstring.language=Japanes
1110 mbstring.internal_encoding = EUC-JP
1113 mbstring.http_input = auto
1117 mbstring.http_output = SJIS
1124 mbstring.encofing__translation = On
1128 mbstring.detect_order = auto
1132 mbstring.substitute_charecter = auto
1133 mbstring.script_encoding = EUC-JP
my.iniの設定は以下のようになっています。
[mysql]
default-character-set=sjis
[mysqld]
default-character-set=sjis
skip-character-set-client-handshake
mysqlでコマンドで確認したところ以下のような文字設定になっています。
mysql> show variables like "char%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | sjis |
| character_set_connection | sjis |
| character_set_database | sjis |
| character_set_results | sjis |
| character_set_server | sjis |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
character_set_systemがutf-8になっているのが気がかりですが、
こんな感じで設定しています。
mysql内では文字化けしていないのに、
phpで呼び出した時に文字化けするのでしょうか?
どなたかご教授よろしくお願いします。
No.4ベストアンサー
- 回答日時:
度々どうも(笑。
まだはまってますか。mysql云々以前に、表示させているスクリプトの文字コードは統一されていますか?
PHPファイルがSJISで作成されていて、内部文字エンコードがEUC-JPで、MySQLから引っ張ってきたデータがUTF-8で、というような事ではわけ分かんなくなります。
内部文字エンコードはSJISならばファイルもSJISで作成していかないとまずいですよね。
また、MySQLに格納されているデータはどんな文字コードで保存されているのですか?MySQLの文字コードがUTF-8にも関わらず、保存されているデータがSJISであれば、set names sjisとやってもSJISをSJISに再変換しようとするのでおかしな事になってしまいます。
MySQLに格納されているデータがおかしいなら、文字コードの罠にはまったまま抜け出せないと思います。
PHPからの送信文字コード、MySQLサーバへの記録文字コード、MySQLサーバからの出力文字コード、PHPでの出力文字コード等をしっかり整理していけば必ず文字化けは解決します。php.iniでの設定で直る事もあるかもしれませんが、経験上は環境設定だけではなかなか直らないという印象です。一つ一つ整理して問題を切り分け、文字コードを確認しながら詰めていけば大丈夫です。
この回答への補足
takectanさん本当にありがとうございました。
完全に文字化け無限ループに嵌っていますTT
今日はもう8時間位文字化けと戦っているので、
また明日mysql内の文字コードから戦いを続けたいと思います。
また、何かありましたら、是非ご教授下さい。
明日中に直っても直らなくても、ここに結果を報告させていただきます。
遅い時間まで本当にありがとうございました。
※事後報告です。
昨日は大変お世話になりました。
taketanさん&wp_さんから貴重な情報を頂き
本当にありがとうございます。。
mysaqlの文字化けが直りましたので、
ここに報告させていただきます。
結論としては、mysql内の問題では無く、
php.iniのmbstringの問題でした、
今までは、
mbstring.internal_encoding = EUC-JP
mbstring.script_encoding= EUC-JP
になっていました。
これは、スクリプトファイルをsjisにすると、
文字化け出る場合があると書いてあったので、
意図的にEUC-JPに変えたものでしたが、
今回、mysql内の設定がsjisで統一されていたため、
phpファイルをEUC-JPで作っているのに、sjisでブラウザーに
出していたため、このような文字化けが出たと
推測しています。
なので、上記のEUC-JPをSJISに変えたら文字化けが
解消されました。
taketanさんの昨日の最後の回答がヒントになり、
大変助かりました。
また何かありましたら、是非、
ご教授ください。
本当にありがとうございました。
se-nabe
No.3
- 回答日時:
#1です
例えばSJISなら、
mysql_query("set names SJIS");
のような形でSELECTなどのクエリを発行する前に書きます。
taketanさん
またまたお早い回答ありがとうございます。
今やって見ました。
mysql_query("set names sjis");
mysql_query("set names utf8");
mysql_query("set names EUC-JP");
上記の三通りを試して見ましたが、
utf8にした時、日本語じゃないですが、文字化け具合が変わりました。
又、
mysql_query("set names 'character_set_name'");
ともやってみましたが、、
以前状況は変わりません。
参考までに、今の文字化けの例として、
「お好み焼き」が「DQ」と表示されます。
お手数をおかけしてすいません。。。。
No.2
- 回答日時:
MySQLは4.1より前か後かで日本語の取扱いが違ってきます。
4.1以降は文字コードはクライアントにあわせて設定可能になっています。
SET NAMES character_set_name
SET CHARACTER SET character_set_name
接続時に、上のようなクエリを発行して下さい。DB内のデータがどういうエンコードであっても、クライアント側へのデータは設定した文字コードで取得出来ます(逆に、設定しないと文字化けする)。
http://dev.mysql.com/doc/refman/4.1/ja/charset-c …
参考まで。
taketanさん
早速の回答感謝します。
返事が遅れてすいません。
上記のようなクリエは、phpの中のどこに付ければいいのでしょうか?
例
$sql=mysql_query("set names character_set_name");
こんな感じでmysql内に記述するように書けばいいのでしょうか?
初歩的な質問で申し訳ありません。。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
composerをインストールしたい...
-
HTML PHP ラジオボタンのイベント
-
php でqiitaのサイトにあったフ...
-
【初心者】XAMPPのapacheの(恐...
-
phpのクラスメソッドの定義が長...
-
ファイルアップロードの上限を...
-
$_SESSIONについて教えて下さい。
-
Postgresの特定のカラムからス...
-
画像ファイルの名前をそのままU...
-
PHP8でWarning:Undefined varia...
-
phpの問い合わせフォームを作っ...
-
marginの値でマイナス値を設定...
-
submitで思うようにページが遷...
-
SplFileObject を利用したとき...
-
PHPの勉強してます。 配列のと...
-
BASIC認証のフォームをデザイン...
-
アップロードファイルを表示す...
-
複数のパソコンの中の1つのパソ...
-
返信機能のツリー構造の深さを...
-
PHPについて。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
windwsXP環境下でapache2.2、ph...
-
お名前comのPHPとmysqlの接...
-
php→mysqlへの接続が出来ない(...
-
xamppliteでmysqlにアクセスしたい
-
mysqlへのデータ挿入
-
文字エンコードの設定について
-
localhostにリダイレクトされて...
-
エックスサーバーでのmysql設定...
-
hpinfoにmysqlやmysqliが表示さ...
-
My SQL の文字化け
-
phpでmysql接続について
-
php.iniのMYSQLの部分ですが…ど...
-
データベースへの持続的接続
-
MySQLから送られて来たデータの...
-
勉強の甲斐あっていよいよPHPフ...
-
mysql_connectについて
-
ネット上の無料サーバースペー...
-
CentOS5.3に、apache2.2.15とph...
-
CentOS5のPHPにMySQLサポートを...
-
PHP+MySQL+phpMyAdmin パスワ...
おすすめ情報