問題点
CPIレンタルサーバにMySQLのダンプファイルをエクスポート&インポートした場合、文字化けすることがあります。
これは、CPIサーバのデータベースの基本文字コードがujis
であることが問題である場合が多いです。
レンタルサーバなのでMySQL自体の設定を変えることが出来ないため、PHPやプログラム側からなんとかしようと試みても、どうにも文字化けが直らない場合は、以下を試してみてください。
※MySQLで言うujis
とは、文字コードEUC-JP
のことです。
解決の手順
以下、phpMyAdminを使用してCPIのMySQL5へデータを移植する方法です。
まずはエクスポート
移植元となるサーバのphpMyAdminから普通にUTF-8でダンプファイルをエクスポートしてください。
但し、文字コードの変換はnon
(変換なし)を選択してください。
次にインポート
移植先のサーバのphpMyAdminのインポート画面にて、先ほど作成したダンプファイルを選択して「ファイルの文字セット」がそのファイルの文字コードであることを確認して下さい。
そして一番下のエンコーディングの変換の箇所で 「EUC
」 を選択して実行してください。
これでOKです。
EUCに変換しちゃったら文字化けしちゃうんじゃ?
これだと、データベースがujis(EUC)で保存されてしまい、プログラム側で文字化けが起きてしまう気がしますが、そうはなりません。 以下のSQLをphpMyAdminのSQLから投げてみてください。
sql{gutter:false:MySQLの文字コード関連の設定を確認するSQL
show variables like 'character_set%';
上記のような値が返ってくると思います。
この中で、character_set_database
とcharacter_set_server
がujis
となっており、その他はutf8
になっています。
これはどういうことか超ざっくり言うと、
データベース自体はujis(EUC)で保存されているけど、読み出すときは自動でUTF-8
にして返すよー
っていう意味になります。 つまり、これで、プログラム側は一切弄らず移植元サーバと同じプログラムで文字化けを起こさないために、正常に機能するのです。
ちなみに、元データがUTF-8
でない場合は、やはりプログラム側でSET NAMES
等で事前にクライアント側の文字コードを指定する必要があるかと思います。
以上です。
確認したMySQLバージョン
- MySQL5(MySQL4版では試してませんが、理屈は同じはず・・)