好的,我也遇到了很多问题,但是做了一个肮脏的解决方案。问题是,在 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
现在,您可以在任何 activerecord 实例上调用 update_instance_from_backup(instance)。
foo = Foo.find(3)
update_instance_from_backup(foo)
将让您更新您的实例数据。你当然可以自己做一个循环。:)