« mysql で utf8 を使う | メイン | Rails で mysql の ENUM カラムを使用する »

mysqldump で文字化け

[mysql]

mysql で utf8 を使う参照

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

スクリプトにするほどの物ではないけど・・・
引数のエラーチェックとかないから気をつけて使ってください。

参考サイト

トラックバック

このエントリーのトラックバックURL:
http://i-am.web777.net/mt/mt-tb.cgi/33

コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)