MySQLデータベースのリストアで文字化けする問題への対応メモ
文字コードがEUC-JPのMySQLデータベースを、別サーバのCentOS 6の標準MySQL(バージョン5.1.73)でリストアすると、文字化けして困ったということがあった。
四苦八苦した結果、以下の方法で、何とか文字化けをすることなく、リストアすることができたので、メモとしてまとめておく。
(1)CentOS 6の/etc/my.cnfを修正する。
《修正前の/etc/my.cnf》
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
《修正後の/etc/my.cnf》
/etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
default-character-set=ujis ←追記
character-set-server=ujis ←追記
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
[client] ←追記
default-character-set=ujis ←追記
[mysql] ←追記
default-character-set=ujis ←追記
[mysqldump] ←追記
default-character-set=ujis ←追記
(2)ダンプコマンドに文字コードの指定を付けてダンプする。
ダンプファイル作成元サーバで、ダンプコマンドに文字コードの指定を付けてダンプする。
mysqldump --default-character-set=ujis データベース名 > データベース名.sql
(3)create database(データベース作成)時に文字コードの指定を付ける。
データベースのリストアを行うサーバで、データベース作成コマンドを実行する場合は文字コードを付ける。
mysql> create database データベース名 CHARACTER SET ujis;
(4)データベースのリストア・コマンドを実行する場合、文字コードの指定を付ける。
# mysql データベース名 -u root -p --default-character-set=ujis < データベース名.sql
以上4つの点に気を付けることで文字化け問題を解決できたが、必ずしもこの方法で解決できるとは限らないであろうから、文字化け問題は厄介だなぁ、と思った。