ruby-on-rails - 为什么即使使用 mysql2 gem,ActiveRecord 也会返回编码为 ASCII-8BIT 的字段?

标签 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 环境变量,但没有成功。还有其他地方我可以查看或了解为什么我得到这个错误的编码吗?

最佳答案

啊哈!我的知识浅薄再次受到打击。问题确实出在database.yml中:

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

我仍在使用适配器:mysql,因此即使安装了mysql2 gem,它也没有被使用。我没有意识到我必须在 database.yml 中更改它的名称;我认为它会取代旧的 mysql gem。

现在我们都知道了! :)

关于ruby-on-rails - 为什么即使使用 mysql2 gem,ActiveRecord 也会返回编码为 ASCII-8BIT 的字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7882841/

相关文章:

ruby-on-rails - Resque工作人员无法正常启动

ruby-on-rails - 事件管理员 : Including Javascript

javascript - 如何测试在提交表单之前选中所有单选按钮/复选框

ruby1.9,导轨和 $SAFE=1

轨道上的 ruby 。调度.fcgi 。 dependencies.rb :251:in `require' : cannot load such file -- fcgi (LoadError)

ruby-on-rails - ActiveRecord before_save过滤器可以在不停止事务的情况下停止保存吗?

ruby-on-rails-3 - Minitest w/Rails 中的匿名 Controller

ruby - 每当 Activerecord 的 :after_save callbacks trigger 触发回调

ruby-on-rails - 如何在 Ruby 中查询方法的结果 (rails)

ruby-on-rails - 找到包含多个 ID 的 has_and_belongs_to_many 关联