我在 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/