我已經在ruby 1.9.3/rails 3.1.0中編寫了一個應用程序,使用mysql作爲數據庫和utf8作爲編碼的一切。現在,我必須在使用latin1作爲編碼的遺留數據庫中編寫這個新應用程序的一些數據。這是我的數據庫設置使用ruby 1.9中的不同編碼在數據庫之間移動數據:「Encoding :: CompatibilityError:不兼容的字符編碼:UTF-8和ISO-8859-1」
# database.yml
development:
adapter: sqlite3
encoding: utf8
production:
adapter: mysql2
encoding: utf8
# other params
legacy:
adapter: mysql2
encoding: latin1
而這些(指semplified版)我的模型
class Message < ActiveRecord::Base
attr_accessible :title, :content
def legacy_save
LegacyMessage.create!(title: title, content: content)
end
end
class LegacyMessage < ActiveRecord::Base
estabilish_connection 'legacy' # actually I'm using octopus gem to do this connection
end
當我打電話legacy_save方法的消息對象上的兩件事情可以happern:消息被正確保存當它僅包含ascii字符或者當它包含非ascii字符時引發異常。我試圖讓這個代碼工作,但沒有運氣。
我得到的例外是
Encoding::CompatibilityError: incompatible character encodings: UTF-8 and ISO-8859-1
我和String類如下面的代碼encode方法試過,但沒有運氣。
def legacy_save
LegacyMessage.create!(title: title.encode('ISO-8859-1'),
content: content.encode('ISO-8859-1')
)
end
任何提示?