Хорошо, у меня тоже было много проблем с этим, но я сделал грязное решение. Дело в том, что в Rails 2 гем 'mysql', кажется, принимает строку в кодировке latin1 из базы данных mysql (по умолчанию) как utf 8.
mysql2 больше не делает этого. Загрузка из activerecord в rails2 с гемом mysql показывает правильный вывод, но в rails3 гем mysql больше не работает. Для этого перейдите к консоли в 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) для любого экземпляра activerecord.
foo = Foo.find(3)
update_instance_from_backup(foo)
Позволит вам обновить данные вашего экземпляра. Конечно, вы можете сделать цикл самостоятельно. :)