データベースのデータ量が大きなウェブサイトを「さくらのレンタルサーバ」に移転することになり、 SSH接続してmysqlコマンドでデータをインポートとしたときに、文字化けが発生しました。
先にデータベースはUTF8で作成してあり、そこに他サーバーからのデータファイル(SQL)をインポートしたのですが、 phpmyadminなどで見ると日本語が文字化けしていました。
最初はphpの設定がおかしいのかなと思っていましたが、社内の開発環境では問題なかったため、 MySQLの設定の違いではということになり…。
原因は、さくらのレンタルサーバのMySQLの文字コード設定がujis(EUC)であるためでした。
mysql> show variables like "chara%";
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | ujis |
| character_set_connection | ujis |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | ujis |
| character_set_server | ujis |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
「character_set_client」も含めてutf8に変更したいのですができないそうです。
そこでmysqlコマンドに「–default-character-set=utf8」オプションを付けてインポートすると、 無事文字化けしないようになりました。
具体的には、dump_data.sqlをインポートする場合、次のようなコマンドを実行します。
mysql -u (接続ユーザー名) -p --default-character-set=utf8 -h (接続ホスト名) (データベース名) < dump_data.sql