• ベストアンサー
  • すぐに回答を!

PHP+MySQLの文字化けで悩んでいます

お世話になります。 Windows Server2003で、XAMPPでPHP+MySQLを利用しようとしていますが 文字化けが解消されず困っています。どなたか、お助けいただけないでしょうか。 他では成功していたSJISを使おうと思っていますがうまくいきません。 my.cnfでの[mysqld]や[mysql]などの設定、およびphp.iniのmbstringなどの設定は、 今まで成功していたWindowsやLinuxと同様に行いました。 PHPによる単純な日本語表示もMySQLモニタ上の日本語は問題ありません。 しかし、MySQLからの結果セットを受け取ると文字化けしてしまいます。 たとえば、 $re=mysql_query("SELECT * FROM tb"); while($kekka=mysql_fetch_array($re)){ print $kekka[0]; } などを実行すると「:?w?Z?カ??:」などの表示になってしまいます。 また、PHPからMySQLでINSERTすると、MySQLでも文字化けしてしまいます。 MySQLモニタで「SHOW VARIABLES LIKE 'char%';」を実行すると次のように表示されます。 character_set_client | sjis character_set_connection | sjis character_set_database | sjis character_set_filesystem | binary character_set_results | sjis character_set_server | sjis character_set_system | utf8 知識がなく、悩んでおります。 まことに申し訳ありませんが、どなたかお助けいただけないでしょうか。 どうか、よろしくお願いいたします。

共感・応援の気持ちを伝えよう!

  • 回答数3
  • 閲覧数137
  • ありがとう数3

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

  • ベストアンサー
  • 回答No.2

MySQLのバージョンは、何でしょうか? MySQL 5.0.13以降なら、以下の指定を入れて、MySQLのサービスを再起動してみてください。 my.cnfの[mysqld]に、 skip-character-set-client-handshake 意味としては、サーバ側の文字コードの設定を、クライアント側でもそのまま使う指定です。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

はい、XAMPP独自のmy.cnfの設定のようでした。 my.iniがないので、無理やり自分で作成したものに [mysql]の設定をしたのですが、これはまったく無視されていたようです。 申し訳ありませんでした。 以前も、お助けいただきまして、感謝しております。 また、ご迷惑をおかけしたことをお詫びいたします。 本当にありがとうございました。

関連するQ&A

  • PHPとmysqlでの文字化けについて

    現在PHPとMySQLを利用したwebシステムを作成しています。 しかし文字化けが発生して困っています。こちらの環境は PHP5.1.4 MySQL5.1.11 phpMyAdmin - 2.8.0-rc1 レンタルサーバー(xrea)を使っています。 自分でいろいろと調べたところ文字のエンコードはujisに統一したほうがいいとのことまではわかりました。 show variables like "char%"; を実行したところ character_set_client utf8 character_set_connection sjis character_set_database ujis character_set_filesystem binary character_set_results utf8 character_set_server utf8 character_set_system utf8 このように表示されます。 PHPの方も <?php header('Content-Type:text/html; charset=EUC-JP'); ?> や <?php $str = mb_convert_encoding($str, "EUC-JP", "auto"); ?> を実行しても日本語の部分は???で表示されてしまいます。 いろいろと調べたのですが、さっぱり原因がわかりません。 よろしくお願いします。

  • MySQLの文字化けに関して

    MySQLとPHP、phpMyadminで開発をした際に、phpMyAdminから 登録した値が、PHPで表示させると文字化けしてしまいます。 手当たり次第環境を調べてみましたが、どうしても原因が掴め ません。 わかる方がいらしたら是非教えて下さい。 《環境》 PHP   php-5.0.2 MySQL  mysql-4.0.21 phpMyAdmin phpMyAdmin 2.7.0 です。 MySQLは、  [mysqld]   default-character-set=sjis  [mysql]   default-character-set=sjis  [mysql-dump]   default-character-set=sjis で設定してあり、 phpMyadminは、  $cfg['DefaultLang'] = 'ja-sjis'  $cfg['DefaultCharset'] = 'SHIFT_JIS' と設定してあります。 もちろんPHPも'SJIS'ですが、、、 本当に困っています。 教えてください。

    • ベストアンサー
    • MySQL
  • PHPでMYSQLのデータを読み込んだ時

    PHPでMYSQLのデータを読み込んで出力した時、日本語の部分だけ、表示されません。 my.iniには、いろいろ調べて、下のように書いてみました。ちなみに、sjisと書いてあるところは、ujisと書き換えたりもしました。 バージョンは、アパッチが2.0.53、PHPが5.0.4、MYSQLは4.0.20dです。 日本語の部分以外は、ちゃんと表示されているので、文字の設定が間違っているのだと思うのですが、 どなたか、分かる方教えてください。 [WinMySQLAdmin] Server=C:/mysql/bin/mysqld-nt.exe [mysqld] default-character-set=sjis language=C:/mysql/share/japanese [mysql] default-character-set=sjis [mysql-dump] default-character-set=sjis

その他の回答 (2)

  • 回答No.3

SET NAMES 文字コード を利用する。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

申し訳ありませんでした。 [mysql]の設定が無視されていたようです。 ご迷惑をおかけして申し訳ありませんでした。 ご親切に感謝いたします。ありがとうございました。

  • 回答No.1

charsetは出力していますか? <?php header('Content-Type: text/html; charset=Shift_JIS'); ?> ... <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> ちなみにこの答え書くの3回目。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

申し訳ありませんでした。 付けていませんでした。 また、my.iniがないので、無理やり自分で作成したものに [mysql]の設定をしたのですが、これはまったく無視されていたようです。 ご迷惑をおかけして申し訳ありませんでした。 そして、ご親切に感謝いたします。 ありがとうございました。

関連するQ&A

  • mysql文字化けについて

    mysqlで文字化けしてしまいます +--------------------------+----------------------------------------+ | character_set_client | sjis | | character_set_connection | sjis | | character_set_database | sjis | | character_set_results | sjis | | character_set_server | latin1 | | character_set_system | utf8 | | character_sets_dir | D:\App\Dev\xampp\mysql\share\charsets\ | +--------------------------+----------------------------------------+ となっているのですが 文字化けがなおりません どうすれば治るのでしょうか?

  • MySQLから送られて来たデータの文字化け

    いつもお世話になっています。 今回、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で呼び出した時に文字化けするのでしょうか? どなたかご教授よろしくお願いします。

    • ベストアンサー
    • PHP
  • 日本語の文字化け

    perlのCGI,DBIを使ってMysqlにinsertしてますが、日本語が文字化けします。 文字化けした文字列は???となってます。 ちょと、見当がつかないので困ってます。 Mysqlは5.037を使ってます。 設定ファイルの追記は行ってます。 [mysqld] default-character-set=sjis [mysqldump] default-character-set=sjis [mysql] default-character-set=sjis ●SHOW GLOBAL VARIABLES LIKE 'character\_set\_% ↓実行結果 character_set_client sjis character_set_connection sjis character_set_database sjis character_set_filesystem binary character_set_results sjis character_set_server sjis character_set_system utf8

    • ベストアンサー
    • MySQL
  • MYSQLから抽出したクエリの結果が文字化けします。

    PHPの文字化けの件でお伺いしたいのですが サーバーOS:FreeBSD PHP4.3.11とMYSQL4. 1. 11を利用してWEBアプリを作成しよう としております。 文字化け対策として、my.confに以下の文を追加しました。 [client] default-character-set= sjis [mysqld] default-character-set= sjis character-set-server = sjis [mysqldump] default-character-set= sjis [mysql] default-character-set= sjis mysql再起動後、telnetにて、データベースの内容を 確認したところShiftJISの文字コードでで無事に確認できました。 そこでPHPからこのデータを抽出しようと考え select * from table where column=12345 のような形で日本語のデータをPHPで表示させようとしましたが 日本語のデータのところが????と表示されてしまいうまく表示させることが 出来ません。ここでhttpd.conf に AddCharset SJIS .sjis と追加してしても症状が改善されません。 php.iniを編集すればうまくいくのかと考え、php.iniを確認したところ [mbstring] ;mbstring.internal_encoding = EUC-JP ;mbstring.http_input = auto ;mbstring.http_output = SJIS ;mbstring.detect_order = auto ;mbstring.substitute_character = none; PHPとMYSQLと双方に原因が考えられますが、telnet上ではきれいに 表示されることを考えPHPの項目にてお伺いいたしました。 となっておりました。他に何か原因やチェックしなければいけないところ 等ございましたらご教授ください。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • mysqlの文字化けについてです

    学校でjavaの勉強をしている者です。 初心者です。 学校の宿題をやるために、自宅でmysqlをインストールしたのですが、 javaで実行すると文字化けしてしまいます。 学校では、my.iniの中の [mysql] default-character-set=latin1 を [mysql] default-character-set=sjis と変更し、 [mysqld] default-character-set=latin1 を [mysqld] default-character-set=sjis skip-character-set-client-handshake と変更し、 SQLを再起動すれば解決すると習ったのですが、 文字化けが起こってしまいます。 show variables like '%char%'で文字コードを確認してみたところ、 | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | latin1 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | latin1 | | character_set_system | utf8 | このように、sjisになっていませんでした。 どうしてなんでしょうか? どなたか解答のほどよろしくお願いします。

  • PHP+MySQL 4.1.20における文字化け

    お世話になります。 現在、学内に実験的に設置されているサーバーを使って、そこに 「phpMyFAQ(Ver.2.0.3)」を入れて動かそうと試みています。 phpMyFAQのインストールは済んだのですが、いざ使ってみようと思って カテゴリ追加等をしようとすると、日本語が文字化けして「???????」と いうような状態になります。 きっと文字コードの設定に問題があり、php.iniやmy.cnf等の設定を変える 必要があるのでしょうが、サーバーは共用利用しているものであり、他の 利用者へ影響が出てしまうため、変更が困難です。 また、私自身がまだphpやMySQLに詳しくないため、どこを改善すればよい のかがわからずに困っております。(.htaccessをつくっていろいろと記述 してみたりしたのですが、文字化けは解消されていません。) もし何かアドバイス等ありましたらご教示いただけませんでしょうか。 よろしくお願いいたします。 MySQLのバージョン:4.1.20 PHPのバージョン :4.3.9 <MySQL> character_set_client ujis character_set_connection ujis character_set_database ujis character_set_results ujis character_set_server ujis character_set_system utf8 character_sets_dir /usr/share/mysql/charsets/ [mbstring] mbstring.language = Japanese mbstring.internal_encoding = EUC-JP mbstring.http_input = auto mbstring.http_output = SJIS mbstring.encoding_translation = On mbstring.detect_order = auto mbstring.substitute_character = none;

  • MySQL+PHP文字化け

    PHPからMySQLを使っています。 MySQLもPHPも文字コードはutf8を使っているのですが、PHPMyAdminから入力した日本語を普通に読み出すと文字化けして「??????」になってしまいます。また、自作コードからの日本語のinsertもできません。 しかし、「set character set utf8」を先に実行しておくといずれも上手くいきます。 これは一体どういうことなのでしょうか? そもそも全てutf8で統一しているつもりなのですが、MySQLかクライアントのどちらかで他のコードが使われているということなのでしょうか? MySQLはstatusなどを見てもutf8になっているので、どちらかと言えばクライアントの方が臭うのですが、よくわかりません。 どうか知恵をおかしください。

  • 文字化け MySQL Java JSP サーブレット

    こんにちは。よろしくお願いします。 jdk 1.5 MySQL 5 tomcat 5 を使用しています。 MVCモデルの練習に Model(javaBeans) View(jsp) Controller(サーブレット) に分けて作成しています。 MySQLから取ってきたデータの文字化けに困っています。 全角日本語1文字が半角ハテナ1文字に変わっています。 数字(int)は文字化けせずにちゃんと表示されています。 DBから取ってきた以外の文字に文字化けはありません。 DBのテーブルの中の時点では文字化けはありません。 MySQLの環境を確認すると以下のようです。 | character_set_client | sjis | character_set_connection | sjis | character_set_database | sjis | character_set_filesystem | binary | character_set_results | sjis | character_set_server | sjis | character_set_system | utf8 何かご存知の方アドバイスよろしくお願いします。 また他に必要な情報や確認すべきことがありましたらご指摘よろしくお願いします。

    • ベストアンサー
    • MySQL
  • MySQLレコードの文字化けについて

    皆さんの同様の質問内容を全て拝見しましたが、理解できず質問させていただく経緯になりました。 何度も同じ質問掲載で大変申し訳ありません。 ▼現在の環境です。 Linux ES4 Apache2.0 PHP4.4.4 MySQL 4.1.12 2台のサーバで、WEBとDBに分けて構成しております。 WEBサーバのPHPからはDBサーバのMySQLへ接続可能となり、データも表示されます。 今回問題になっていいるのは、DBサーバ上のLinuxのGNOME端末ツールから接続し、DML文(INSERT)をした際に、日本語の値が化けて格納されてしまう症状に陥っております。 英語の値は問題なくWEB上に表示されております。日本語の値はWEB上では化けて表示されております。DB上の値が化けて格納されたためと思っております。 ▼WEBサーバ側のPHP.iniです。 mbstring_language=Japanese mbstring_internal_encoding=EUC-JP mbstring_http_input=auto mbstring_http_output=pass mbstring_encoding_translation=on mbstring_detect_order=auto mbstring_substitute_character=none ▼DBサーバ側のmy.cnfです。 [mysql] default-character-set=sjis [mysqld] default-character-set=sjis [client] default-character-set=sjis [mysqldump] default-character-set=sjis ▼SHOW VARIABLES LIKE 'char%';を実行した結果 character_set_client sjis character_set_connection sjis character_set_database ujis character_set_results sjis character_set_server sjis character_set_system utf8 同じような質問で大変申し訳ありませんが、どなたか御教授願えませんでしょうか。よろしく御願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLとPHPで日本語が文字化けする。

    MySQLとPHPでアプリを開発中です。 MySQLに登録済の日本語文字列データをPHPでselectして echoを使ってクライアント(Windows XP)のブラウザに表示させると、 文字化けします。 全角文字がすべて半角の '?' になります。 MySQLの状態を調べるために以下を実行しました。 SHOW VARIABLES LIKE 'char%'; 結果は以下のとおりでした。 character_set_client utf8 character_set_connection utf8 character_set_database utf8 character_set_filesystem  binary character_set_results utf8 character_set_server utf8 character_set_system utf8 character_sets_dir /usr/local/mysql5.0.51a/share/mysql/charsets/ PHPの内部エンコードはUTF-8です。 php.iniの関連設定は以下のとおりです。 default_charset = "UTF-8" mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.detect_order = SJIS,EUC-JP,JIS,UTF-8,ASCII mbstring.substitute_character = "none" mbstring.encoding_translation = On extension_dir = "/usr/local/lib/php/extensions" extension=php_mysqli.dll extension = gd.so extension = mysqli.so extension = xmlrpc.so MySQLもPHPもすべてUTF-8で統一したので問題ないはずだと 思ったのですが? 半角アルファベットは問題なく表示されます。 サーバー側OSはSolarisです。 MySQLから正しくデータを得られていないように思えるのですが。 ヒントでも結構ですから教えていただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP