• 締切済み

phpMyAdmin内での文字化け

サーバはさくらインターネットを利用してます。 レンタルサーバから専用サーバに移転したのですが、 専用サーバではphpMyAdminで日本語データの文字化けが起きます。 専用サーバのphpMyAdminからDB作成の際、下記の設定で行い、 MySQLの文字セット UTF-8 Unicode (utf8) MySQLの接続照合順序 utf8_unicode_ci DB の照合順序 utf8_unicode_ci レコードをINSERTする際、下記のように文字コードを指定し、 $sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP"); execute_sql($con, $sql); 実行したら、phpMyAdmin内で日本語データが文字化けしました。 サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。 DB の照合順序をutf8以外(ujis_japanese_ciなど)として、 DBを作った場合、レコードをINSERTしたら、サイト内のDBデータも phpMyAdmin内データもどちらも日本語が文字化けします。 また、レンタルサーバのphpMyAdminからDBデータをエクスポートして、 専用サーバのphpMyAdminからインポートした場合、 読み込むDBデータファイルの文字コードをUTF-8にしなければ、 phpMyAdmin内で日本語データが文字化けしてしまいます。 ただ、UTF-8にしてインポートしてもphpMyAdmin内では 文字化けしませんが、サイト内で表示しているDBデータは 文字化けします。 専用サーバのphpMyAdminから データを日本語の文字列に編集・更新したら、 phpMyAdmin内ではそのデータに関しては文字化けなく表示されますが、 サイト内ではそのデータは文字化けしてしまいます。 専用サーバ情報は下記の通りです。 【専用サーバ】 OS:CentOS 5 Apache 2.2.3 PHP5.1.6 DBサーバ:MySQL 5.0.77 アップしているファイルの文字コード:EUC 分かる方、ご回答、よろしくお願いいたします。

みんなの回答

  • BellBell
  • ベストアンサー率54% (327/598)
回答No.3

普通は、文字化け等で悩まなくてもいいように、HTMLの文字コード、PHPソースの文字コード、そしてDBの文字コードは一致させる事が求められます。 イレギュラーに文字コードをバラバラにするのであれば、文字コードをきちんと理解した対処をしましょう。 >レコードをINSERTする際、下記のように文字コードを指定し、 >$sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP"); >execute_sql($con, $sql); >サイト内で表示しているDBデータ(日本語)は文字化けしませんでした。 当然ですね、EUC-JPで保存してるのでとりだしたときもEUC-JPになります。 HTML(およびPHP)の文字コードとしては合っているので、結果的に文字化けしていないだけです。 保存時に一旦文字化けして、取り出し時に逆文字化けしているので、結果的に文字化けしていないように見える、と言えば判りやすいですかね。 ただ、 >実行したら、phpMyAdmin内で日本語データが文字化けしました。 これも当然です。 UTF-8のDBに対して、EUC-JPで保存しているのですから。 先の例で言えば、保存時に一旦文字化けしている結果です。 >phpMyAdminからデータを日本語の文字列に編集・更新したら、サイト内ではそのデータは文字化けしてしまいます。 これも当然です。 先の例で言えば、取り出し時に逆文字化けした結果です。 保存時には、#1、#2の方のいうようにUTF-8に変換して保存する必要があります。 $sql=mb_convert_encoding($sql,"UTF-8","EUC-JP"); そして取り出し時には、毎回、EUC-JPに変換して出力しなければなりません。 echo mb_convert_encoding($hoge['field1'],"EUC-JP","UTF-8"); echo mb_convert_encoding($hoge['field2'],"EUC-JP","UTF-8"); echo mb_convert_encoding($hoge['field3'],"EUC-JP","UTF-8"); このように面倒な事をしたくないために、イレギュラーな設計をしないのが普通です。 >$sql=mb_convert_encoding($sql,"UTF-8","EUC-JP"); >で実行してみましたが、別の変な文字に文字化けしました。 おそらく、クライアントの文字コードが正しく認識されていないのではないかと思います。 MySQLに接続直後に以下の関数を実行してください。 mysql_set_charset('utf8'); クライアントの文字コードをMySQLに対して通知する関数です。 環境によっては、"SET NAMES utf8"をクエリーとして発行する方法をとらなければならないかもしれません。 ※もしかしたら、上記のすべてが以下の一行一発だけで解決するんじゃないかな、との期待ができなくもありません。 理屈の上ではあり得るかも、というレベルですが。 mysql_set_charset('euc-jp');

chibibichi
質問者

お礼

MySQLの文字セットの問題でした。 ありがとうございました。

chibibichi
質問者

補足

ありがとうございます。 とても分かりやすかったです。非常に参考になりました。 これから試してみるつもりです。結果も報告いたします。 ところで、MySQLの文字セットを UTF-8 からEUC-JPに変更すれば 解決しますでしょうか?またそれは可能でしょうか?

すると、全ての回答が全文表示されます。
noname#111181
noname#111181
回答No.2

MySQLの文字セットが UTF-8 になっているのですから、 $sql=mb_convert_encoding($sql,"UTF-8","EUC-JP"); とすべきです。 ご確認下さい。

chibibichi
質問者

補足

ありがとうございます。 MySQLの文字セットを UTF-8 からEUC-JPに変更することは可能でしょうか?

すると、全ての回答が全文表示されます。
  • bm_hiro
  • ベストアンサー率51% (200/388)
回答No.1

> $sql=mb_convert_encoding($sql,"EUC-JP","EUC-JP"); とりあえず、これは $sql=mb_convert_encoding($sql,"UTF-8","EUC-JP"); と、脳内変換しました。 mb_internal_encoding() とか mb_language() は どうなってますか?

chibibichi
質問者

補足

ご回答、ありがとうございます。 $sql=mb_convert_encoding($sql,"UTF-8","EUC-JP"); で実行してみましたが、別の変な文字に文字化けしました。 phpMyAdminだけでなく、サイト内でも文字化けが起きました。 ドキュメントルート(/home/▲▲▲/www) の直下に.htaccessファイルがあり、 中は下記のようになってます。 php_value include_path "/■■■/PEAR/" php_flag log_errors 'On' php_flag register_globals 'On' php_value mbstring.language "Japanese" php_value mbstring.internal_encoding "EUC-JP" php_flag mbstring.encoding_translation On php_value default_charset "EUC-JP" php_value mbstring.http_input auto php_value mbstring.http_output "EUC-JP" php_value mbstring.substitute_character none ドキュメントルート /home/▲▲▲/www phpMyAdminのディレクトリ /home/phpmyadmin となっています。 よろしくお願いいたします。

すると、全ての回答が全文表示されます。

専門家に質問してみよう