为什么ActiveRecord甚至使用mysql2 gem返回编码为ASCII-8BIT的字段?

mlt*_*tsy 7 activerecord ruby-on-rails character-encoding ruby-on-rails-3 ruby-1.9

我在Ruby 1.9,Rails 3.0,ActiveRecord 3.0中遇到了这个错误:

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)
Run Code Online (Sandbox Code Playgroud)

发生这种情况是因为我试图调用的字符串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> 
Run Code Online (Sandbox Code Playgroud)

我在MySQL中更改了数据库编码和表编码,我也尝试过设置LANG env变量而没有运气.有没有其他我可以看到或看到为什么我得到这个错误的编码?

mlt*_*tsy 8

啊哈!我的知识浅薄再次袭来.问题确实存在于database.yml中:

development:
  encoding: utf8
  adapter: mysql2
  [...]
Run Code Online (Sandbox Code Playgroud)

我仍在使用adapter: mysql,即使mysql2安装了宝石,它也没有被使用.我没有意识到我必须改变它的名字database.yml; 我以为它会取代旧的mysql宝石.

现在我们都知道了!:)