![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
いつもお世話になっています。
今回、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ランキング
-
データベースにアクセスして結...
-
MySQLとPHPで日本語が文字化け...
-
XAMPPでSQL文を流すとフリーズ...
-
MySQLから送られて来たデータの...
-
onedrive にexcelファイルをア...
-
MySQLのベースに書かれたプログ...
-
フォントの色を変えるには?
-
トランザクションが原因?DBに...
-
PHPのif文でその処理を途中で抜...
-
透過PNGが透過されない!!
-
違法アップロードについて
-
BASP21メール送信(SMTP-AUTH認...
-
Subversionで、ファイルをリネ...
-
VBA 添付ファイルをつけてメー...
-
.phpファイルが、表示されない
-
ドラッグアンドドロップで画像...
-
phpのextension_dirを複数指定...
-
mb_convert_encoding で?になる。
-
php.ini を設定を変更すると再...
-
3つ以上の論理積は利用可能なの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
XAMPPでSQL文を流すとフリーズ...
-
お名前comのPHPとmysqlの接...
-
localhostにリダイレクトされて...
-
hpinfoにmysqlやmysqliが表示さ...
-
PHPの設定でMySQLを有効にする...
-
mysql_connectについて
-
MySQLから送られて来たデータの...
-
pwebmanagerにアクセスするとFa...
-
XOOPSインストール中に真っ白画...
-
mysql文字化けについて
-
CentOS5.3に、apache2.2.15とph...
-
PHPで作ったログイン機能でデー...
-
MySQL5.5の設定とエラー
-
勉強の甲斐あっていよいよPHPフ...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
別ファイルの変数を呼び出した...
-
CFileDialogの最初のディレクト...
-
.phpと.incファイルの違いはな...
おすすめ情報