![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
サーバはさくらインターネットを利用してます。
レンタルサーバから専用サーバに移転したのですが、
専用サーバでは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ランキング
-
文字化け変換方法
-
メールのCCに複数のアドレスを...
-
【追】「あ」→「82A0」のように...
-
VBAのコマンドボタンの文字列の...
-
\\nと\\rの違い
-
全角括弧と全角読点の間隔を狭...
-
エスケープ文字の復帰(¥r)と...
-
ソースコードの1行が長いとき...
-
正規表現パターンの記入方法に...
-
メッセージボックスで1025文字...
-
phpの連続改行について
-
【VB6】項目内に改行コードを含...
-
VBAのINPUTBOX内で、改行する方法
-
エクセルのCOUNTIFが正しくカウ...
-
テキストファイルから1文字ず...
-
文字の入力で横バー上段、中断...
-
コンボボックスの項目中に改行を
-
、"(ダブルクォーテーション)...
-
エクセルでの漢字、カタカナ、...
-
独自タグに囲まれた文字列の変換
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
文字化け変換方法
-
SJISで取得した半角カナをUTF-8...
-
UTF8メールがLotus Notesで文字...
-
SQL Serverで文字コードUTF-8
-
PHPmailerでの添付ファイルの文...
-
includeファイルの文字コードに...
-
IMAP関数で取得した文字列の、...
-
SJIS→UTF-8変換後の文字化けに...
-
mb_ereg_replace での文字変換
-
mb_strposについて予定外の結果...
-
PHP+Postgres 「髙」が文字化け
-
複数行の文字列を1行にまとめる...
-
小さいひらがな(っ、ょ、ぃ、ゃ...
-
mb_send_mailの2重投稿を防止し...
-
phpMyAdmin内での文字化け
-
PHP cURLでPOSTした値が文字化...
-
mb_regex_encodingでエンコード...
-
mb_ereg_replaceに関して
-
文字コードの検出が正しいかを...
-
mail()で送信したメールのタイ...
おすすめ情報