わかりました、これにも多くの問題がありましたが、汚い解決策を作りました。Rails 2 では、「mysql」gem は mysql データベース (デフォルト) からの latin1 でエンコードされた文字列を utf 8 として受け入れるようです。
mysql2 はこれを行いません。mysql gem を使用して rails2 の activerecord からロードすると正しい出力が表示されますが、rails3 では mysql gem が機能しなくなりました。したがって、rails2 のコンソールに移動し、次のスニペットを使用します。戻りたい場合に備えて、データベースのコピーを使用します。
def update_instance_from_backup(current_instance)
begin
ActiveRecord::Base.establish_connection(
:adapter => "mysql",
:host => "localhost",
:username => "...",
:password => "...",
:database => "database_backup"
)
attributes = current_instance.class.find(current_instance.id).attributes
ActiveRecord::Base.establish_connection(
:adapter => "mysql2",
:host => "localhost",
:username => "...",
:password => "...",
:database => "database",
:encoding => "utf8"
)
rescue
else
current_instance.update_attributes attributes
puts "#{current_instance.class.name} #{current_instance.id} (dd. #{current_instance.updated_at}) updated"
end
end
これで、任意のアクティブ レコード インスタンスで update_instance_from_backup(instance) を呼び出すことができます。
foo = Foo.find(3)
update_instance_from_backup(foo)
インスタンス データを更新できます。もちろん、自分でループすることもできます。:)