MySQL

あるサイトで使っているDBのメンテナンスをしたいと考えています。DBがなぜかlatin1のcharsetで運用されてしまっているので、UTF8にしたいのですが、なかなか難しいようです。とりあえず、なぜか–default-character-set=latin1を指定してダンプをとる必要があります。

$ mysqldump -u root –default-character-set=latin1 -c -n db > db_latin.sql

これを、nkfなどで変換。データはEUC-JP(ujis)なので、下記コマンドで変換できます。

$ nkf -wE db_latin.sql > db_w.sql
$ sed ‘s/CHARSET=utf8/CHARSET=utf8/g’ db_w.sql > db_utf8.sql

SQLの最初の方でset name latin1となっているので、そこもutf8と直します。そのあと、リストアをすればいいのですが、先にdb_utf8を用意しておきます。

$ mysql -u root db_utf8 -p
mysql> create database db_utf8 default character set utf8;

あとは、リストア。
$ mysql -u root db_utf8 < db_utf8.sql ところが、「Got a packet bigger than 'max_allowed_packet' bytes」エラーが発生。パケットサイズが大きいという事なので、オプションで --max_allowed_packet を使えばいいらしいのですが、うまくいきませんでした。 $ mysql --max_allowed_packet=128M -u root db_utf8 < db_utf8.sql my.cnfの設定を変更して対応という手もあるようですが、こちらは試してみていません。 [mysqld] (略) max_allowed_packet=128M

同じカテゴリの記事: Linux