Monday, October 27, 2008

Fixing false latin1 encoding MySQL database into utf8

Rails 2.2 には mysql pure ruby adapter が含まれていないので、アップデートしたときに mysql native adapter を入れていない事に気がついた。
 sudo gem install mysql

その後、アプリケーションを再起動したら、データベースに保存されている文字列の表示が思いっきり文字化けしてしまった。
database.yml をよく見てみると、
 encoding: utf-8

しまった。 MySQL adapter の場合、
 encoding: utf8

と書かなければいけなかったのだ。
MySQL native adapter のデフォルトエンコーディングは latin1 らしいので、一度、 latin1 としてダンプして、
 mysqldump --default-character-set=latin1 -u root foo_production > foo.mysql

ダンプファイルの SET NAMES を書き換え
- /*!40101 SET NAMES latin1 */;
+ /*!40101 SET NAMES utf8 */;

database の再作成
mysql -u root -e "drop database foo_production; create database foo_production"

そして、ロード
mysql -u root foo_production < foo.sql


つまらないバッドノウハウで恐縮ですが、以前にも同じ事をやらかしてしまったことがあったので役に立つこともあるかと。

No comments: