![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いつもお世話になっています。
今回、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で質問しましょう!
似たような質問が見つかりました
- PHP phpのメールフォームの完了画面でメール受信のコードを書いています。 1 2023/05/31 11:39
- PHP PostgreSQLからCSV形式でエクスポートする際にカラム内の改行をとる方法 1 2023/02/22 10:05
- MySQL php テーブルを作れない 2 2022/11/17 18:22
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- MySQL MYSQL エラー 2 2022/10/18 11:37
- MySQL SHOW CREATE TABLE posts;これって何ですか? 3 2022/08/28 22:57
- PHP php エラー 2 2022/10/23 16:43
- その他(プログラミング・Web制作) mariadbでのエラー 1 2022/11/15 12:31
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) VBAでの共有パスにつきまして 1 2023/03/04 17:24
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化けに関して
-
お名前comのPHPとmysqlの接...
-
phpから、mysqlログイン時のユ...
-
UTF-8対応TeraTerm Proで接続で...
-
レンタルサーバでPHPからMySQL...
-
XOOPSインストール中に真っ白画...
-
データベースに接続できない・...
-
PHPでMySQLのDBに接続
-
【BAT(バッチ)ファイル】Web...
-
フォントの色を変えるには?
-
別ファイルの変数を呼び出した...
-
onedrive にexcelファイルをア...
-
FTPコマンドでディレクトリごと...
-
PHPのif文でその処理を途中で抜...
-
ヒアドキュメントを中断してinc...
-
$_SESSION 有効期限をブラウザ...
-
FORMで送信ボタンと戻るボタン...
-
inet コントロールを用いてHTML...
-
PHPのタイムアウトについて
-
暦について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PHPのWARNINGをcatchするには
-
レンタルサーバでPHPからMySQL...
-
localhostにリダイレクトされて...
-
PHPで作ったログイン機能でデー...
-
lolipopでのmysql接続について
-
XserverでpearのDBでMySQLに接続
-
phpMyAdminが使えない
-
接続しているデータベース名を得る
-
XOOPSのサーバアクセス設定につ...
-
エックスサーバーでのmysql設定...
-
データベースと連動したベーシ...
-
phpmyadminのトップページのMyS...
-
My SQL の文字化け
-
MySQLから送られて来たデータの...
-
XOOPSインストール中に真っ白画...
-
MySQLとPHPで日本語が文字化け...
-
MySQL5.5の設定とエラー
-
フォントの色を変えるには?
-
onedrive にexcelファイルをア...
-
PHPのif文でその処理を途中で抜...
おすすめ情報