CPIレンタルサーバのMySQLにインポートすると文字化けする

問題点

CPIレンタルサーバにMySQLのダンプファイルをエクスポート&インポートした場合、文字化けすることがあります。 これは、CPIサーバのデータベースの基本文字コードがujisであることが問題である場合が多いです。 レンタルサーバなのでMySQL自体の設定を変えることが出来ないため、PHPやプログラム側からなんとかしようと試みても、どうにも文字化けが直らない場合は、以下を試してみてください。

※MySQLで言うujisとは、文字コードEUC-JPのことです。

解決の手順

以下、phpMyAdminを使用してCPIのMySQL5へデータを移植する方法です。

まずはエクスポート

移植元となるサーバのphpMyAdminから普通にUTF-8でダンプファイルをエクスポートしてください。 但し、文字コードの変換はnon(変換なし)を選択してください。

次にインポート

移植先のサーバのphpMyAdminのインポート画面にて、先ほど作成したダンプファイルを選択して「ファイルの文字セット」がそのファイルの文字コードであることを確認して下さい。 そして一番下のエンコーディングの変換の箇所で EUC を選択して実行してください。

CPI:phpMyAdminにてEUCに変換してインポート

これでOKです。

EUCに変換しちゃったら文字化けしちゃうんじゃ?

これだと、データベースがujis(EUC)で保存されてしまい、プログラム側で文字化けが起きてしまう気がしますが、そうはなりません。 以下のSQLをphpMyAdminのSQLから投げてみてください。

sql{gutter:false:MySQLの文字コード関連の設定を確認するSQL show variables like 'character_set%'; CPI:phpMyAdminにてMySQLの文字コード環境を確認

上記のような値が返ってくると思います。 この中で、character_set_databasecharacter_set_serverujisとなっており、その他はutf8になっています。 これはどういうことか超ざっくり言うと、

 データベース自体はujis(EUC)で保存されているけど、読み出すときは自動でUTF-8にして返すよー

っていう意味になります。 つまり、これで、プログラム側は一切弄らず移植元サーバと同じプログラムで文字化けを起こさないために、正常に機能するのです。

ちなみに、元データがUTF-8でない場合は、やはりプログラム側でSET NAMES等で事前にクライアント側の文字コードを指定する必要があるかと思います。

以上です。

確認したMySQLバージョン

  • MySQL5(MySQL4版では試してませんが、理屈は同じはず・・)