2006年12月05日
mysqldumpで文字化けしないためのメモ
ローカルの開発環境で使っていたMySQLなんですが、何も考えずデフォルトの設定で使っていたら、mysqldumpした際に、データが文字化けして、ちょっとは待ったのでメモ。
MySQLのバージョンは4.1.20。
文字化けする原因は、mysqldumpがデフォルトでは、文字コードをUTF-8で出力するようになっていて、フィールドの型がUTF-8でない場合は、自動でUTF-8に変換するためのようです。
僕が使っていたDBは文字コードについて特に何も設定していなかったので、デフォルトの文字コードであるlatin1になっていました。
なので、これもmysqldumpするとlain1 -> UTF-8な変換が自動で行われ文字化けしたということのようです。納得。
この自動変換を行わないようにすれば解決するはず。ということで調べてみると、--default-character-setというオプションを使うとよいことがわかりました。これを使ってデフォルトの文字コードをDBの文字コードとあわせてやることで、自動変換が行われなくなり、文字化けしないようです。
で、結局以下のコマンドで文字化けせずdumpすることができました。
mysqldump --default-character-set=latin1 -uroot --all-databses > db.dump
これでデータ自体は文字化けしなくなりますが、これをそのまま、UTF-8なDBに取り込むと、取り込んだデータが文字化けしてしました。
ダンプしたデータを見てみると、所々にSET NAMES latin1とかDEFAULT CHARSET=latin1のように「latin1]の文字が。。
これが原因だったようで、ワンライナーでlatin1をutf8に変更してからインポートしたところ、文字化けせずに取り込むことができました。
perl -pi -e 's/latin1/utf8/' db.dump
Continuing the discussion...
このエントリーのトラックバックURL:
http://hori-uchi.com/mt/trackback/452
Comments
こんにちは。
大変ご無沙汰しております。
mysqldumpで--default-character-setを指定するまでは分かっていたのですが、create tableでの文字コード指定までは気づきませんでした。
これでようやく文字コードの心配もなくなりました。
どうもありがとうございます。
Posted by komchiro at 2007年12月21日 16:48
