[mysql]
mysqlの日本語設定をした際に、以前から運用しているDatabaseがある場合、環境変数、character_set_database が、utf8になっていない場合がある。(例えば、latin1になっている。)
この場合、TABLE の CHARSET が、UTF8になっていない可能性が高く、SELECT 結果の表示が文字化けしてしまったり、mysqldump の結果が文字化けしてしまったりといった問題が発生する。
mysqldumpの文字化けは、--default-character-set オプションをつけることで解決できる。
mysqldump -uUser -pPassword --compact --default-character-set=binary hageDb > hage.sql
hoge.sql の中身を確認してみると、
DROP TABLE IF EXISTS `db_name`;
CREATE TABLE `db_name` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(255) default NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
確かに、DEFAULT CHARSET=latin1 となっている。
これを sed で変換してリストアするスクリプトを書いてみた。
#!/bin/bash
echo "Convert Database : $1"
mysqldump -u root --compact --default-character-set=binary $1 > org.sql
sed 's/latin1/utf8/g' org.sql > conv.sql
mysql -u root -e "drop database $1"
mysql -u root -e "create database $1"
mysql -u root $1 < conv.sql
スクリプトにするほどの物ではないけど・・・
引数のエラーチェックとかないから気をつけて使ってください。