
サーバはさくらインターネットを利用してます。
レンタルサーバから専用サーバに移転したのですが、
専用サーバでは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
分かる方、ご回答、よろしくお願いいたします。
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');
この回答への補足
ありがとうございます。
とても分かりやすかったです。非常に参考になりました。
これから試してみるつもりです。結果も報告いたします。
ところで、MySQLの文字セットを UTF-8 からEUC-JPに変更すれば
解決しますでしょうか?またそれは可能でしょうか?
No.2
- 回答日時:
MySQLの文字セットが UTF-8 になっているのですから、
$sql=mb_convert_encoding($sql,"UTF-8","EUC-JP");
とすべきです。
ご確認下さい。
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() は どうなってますか?
この回答への補足
ご回答、ありがとうございます。
$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
となっています。
よろしくお願いいたします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
文字化け変換方法
-
mb_regex_encodingでエンコード...
-
PHPアクセスログ バッチ処理
-
セッションが文字化け、エンコ...
-
VBAのコマンドボタンの文字列の...
-
文字の入力で横バー上段、中断...
-
改行について
-
【VBA】エクセルで最後の不要な...
-
メッセージボックスで1025文字...
-
VBAでCSVをExcelに取り込む時に...
-
エスケープ文字の復帰(¥r)と...
-
Excel関数「COUNTIF」で”文字”...
-
C言語の標準入力で改行しない方法
-
LaTeX: captionの中で改行した...
-
ソースコードの1行が長いとき...
-
C++で空Enterの入力を判...
-
全角括弧と全角読点の間隔を狭...
-
XMLのタグ名の禁則文字
-
CSVファイルの改行コード判別
-
ラベル(スタティックテキスト)...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
PHPmailerでの添付ファイルの文...
-
PHP cURLでPOSTした値が文字化...
-
SQL Serverで文字コードUTF-8
-
日本語(マルチバイト)でのwor...
-
「テキストテキスト」という文...
-
imodeメールのSubject部分の文...
-
SJISで取得した半角カナをUTF-8...
-
SJISからUTFに変換して...
-
mb_eregについて
-
Shift-JISからUTF-8への変換が...
-
【PHP】日本語を実体参照符号化...
-
PostgreSQLからCSV形式でエクス...
-
PHPの文字化けについて教え...
-
PHPでのメール差出人名について
-
phpフォームで携帯へメール送信...
-
携帯とPCにメールを送る(文字...
-
文字コードを変換したURLを作成...
-
vodafoneが言う事ききません
-
メールのCCに複数のアドレスを...
おすすめ情報