デフォルトで"latin1"を使い続けていたDBのtableを、全部"utf8"に変更しようとした。
my.cnfで変更する前にmysqldumpでtable情報を取得しておき、my.cnfを変更、再起動。
すると日本語の部分が読めなくなる。
ここでdumpから復元しようと
$ mysql -u hoge -p fuga < dumpfile
とやっても、結局作成されるのは文字化けしたtableだった。
dumpの中の文字コードがおかしいのか?と色々変換しようとしてみたがうまくいかず。
結局、PerlのDBI経由で復元することに。
#!/usr/bin/perl use strict; use warnings; use DBI; my $dbh = DBI->connect('DBI:mysql:hoge', 'fuga', 'piyo'); my $sql = ""; while (<>) { next if $_ =~ /^[\/-]/; $sql .=$_; if ($sql =~ /;$/) { $dbh->do($sql); $sql = ""; } }
dumpしたファイルを引数にこれを実行することでとりあえず文字コードの異なるDBへの移行ができた。
文字コードって難しい・・・