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

时间:2011-10-24 22:44:29

标签: ruby-on-rails ruby-on-rails-3 activerecord character-encoding ruby-1.9

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

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变量而没有运气。有没有其他我可以看到或看到为什么我得到这个错误的编码?

2 个答案:

答案 0 :(得分:8)

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

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

我还在使用adapter: mysql,所以即使安装了mysql2 gem,也不会使用。我没有意识到我必须在database.yml中更改它的名称;我以为它会替换旧的mysql宝石。

现在我们都知道了! :)

答案 1 :(得分:1)

您是否在config/database.yml

中正确设置了连接编码
development:
  encoding: utf8