7

我已經越來越在Ruby 1.9的這個錯誤,Rails的3.0,ActiveRecord的3.0:爲什麼ActiveRecord使用mysql2 gem返回編碼爲ASCII-8BIT的字段?

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) 

發生這種情況,因爲該字符串上我想打電話給gsub(從一個ActiveRecord對象場直接來)編碼爲ASCII-8BIT。我讀過幾篇文章,文章和答案,說這是由mysql gem編碼錯誤造成的,並提示mysql2。

但我已經使用mysql2了。我試過的0.2.x版本和最新的0.3.7版本,並沒有解決問題:

irb> str = Discussion.first.content 
=> "Something's wrong with encodings..." 
irb> str.encoding 
=> #<Encoding:ASCII-8BIT> 

我已經改變了數據庫的編碼和編碼表在MySQL中,我也試着設置LANG env變量沒有運氣。還有其他地方我可以看看或看看爲什麼我得到這個錯誤的編碼?

+0

下面是另一個信息:\ _ \ _ ENCODING \ _ \ _,Encoding.default_external和Encoding.default_internal都返回UTF-8 – mltsy

回答

8

啊哈!我的知識淺薄再次襲來。這個問題的確是在database.yml中:

development: 
    encoding: utf8 
    adapter: mysql2 
    [...] 

我還是用adapter: mysql所以即使安裝了mysql2寶石它不是使用。我沒有意識到我必須改變它的名字database.yml;我原以爲會替換舊的mysql寶石。

現在我們都知道了! :)

+0

注意:這不適用於DataMapper項目!我不知道爲什麼適配器在ActiveRecord(?)中顯然被稱爲mysql2,但在DataMapper項目中,在database.yml中使用'mysql2'只會導致錯誤,因爲DM使用的適配器的名稱是'mysql'。 DataMapper使用do-mysql驅動程序,它沒有字符編碼問題,所以mysql2 gem是不必要的。反正也沒有幫助,因爲dm-mysql-adapter不使用它。 – mltsy

+1

我在Ruby 2.0.0-p353上運行Rails 4.0.2使用MySQL 5.1.71。 在database.yml中,對於所有環境,編碼設置爲「utf8」,適配器爲「mysql2」。 我的表都使用UTF-8,「DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci」。 任何想法,我可以看看爲什麼ActiveRecord遞給我ASCII-8BIT字符串? –

+0

問這裏http://stackoverflow.com/questions/22719767/activerecord-in-rails-4-0-4-gives-ascii-8bit-with-mysql2-encoding-set-to-utf8 –

1

您是否在config/database.yml中正確設置了連接編碼?

development: 
    encoding: utf8 
+0

我不是!但我添加到我的database.yml文件,它並沒有改變任何東西。射擊。感謝您的提示,但! – mltsy

相關問題