好吧,我也遇到了很多問題,但做了一個骯髒的解決方案。事情是,在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)
是否允許您更新實例數據。你當然可以自己做一個循環。 :)
你一直在使用哪種轉換器? – marko 2012-03-09 19:01:41
我使用的是unikey轉換器,如果您使用越南語,這可能只會有幫助。 – 2012-03-10 12:45:43