我使用的是rails 3.0.3,我已经将mysql适配器从ruby mysql更改为mysql2,但是现在出现了以下错误:

incompatible character encodings: ASCII-8BIT and UTF-8

我到处都读到过这方面的文章,但我没办法把它修好。
应用程序.rb:
config.encoding = "utf-8"

数据库.yml:
development:
  adapter: mysql2
  encoding: utf8
  database: rails3_development
  username: root
  password:
  host: localhost

宝石:
specs:
  abstract (1.0.0)
  actionmailer (3.0.3)
  actionpack (3.0.3)
  activemodel (3.0.3)
  activerecord (3.0.3)
  activeresource (3.0.3)
  activesupport (3.0.3)
  arel (2.0.7)
  bcrypt-ruby (2.1.4)
  builder (2.1.2)
  erubis (2.6.6)
  i18n (0.5.0)
  jquery-rails (0.2.6)
  mail (2.2.15)
  mime-types (1.16)
  **mysql2 (0.2.6)
  orm_adapter (0.0.4)
  paperclip (2.3.8)
  polyglot (0.3.1)
  rack (1.2.1)
  rack-mount (0.6.13)
  rack-test (0.5.7)
  rails (3.0.3)
  railties (3.0.3)
  rake (0.8.7)
  thor (0.14.6)
  treetop (1.4.9)
  tzinfo (0.3.24)
  warden (1.0.3)
  will_paginate (3.0.pre2)

最佳答案

我有一个类似的问题:一个带有排序规则utf8_bin的varchar字段具有ascii-8bit编码。
问题在于mysql2 gem,而不是rails,或者mysql设置,至少在我的例子中是这样,因为它不是用ruby mysql gem出现的。
切换到ruby mysql时,请测试问题是否消失。
下面的代码从ruby 1.9.2上的irb运行,演示了这个问题:

require 'mysql2'
c = Mysql2::Client.new(host: "localhost", username: "root", database: 'd')
c.query("select word from t where word = 'a'").to_a[0]["word"].encoding
# => #<Encoding:ASCII-8BIT>

在mysql数据库中,每个可能的设置都被设置为utf8-bin排序规则。
在mysql2 gem中,在第253行的result.c文件中,有以下代码片段:
if (fields[i].flags & BINARY_FLAG) {
  rb_enc_associate(val, binaryEncoding);
} else ...

我相信这就是二进制(ascii-8bit)编码被设置的地方,也许是因为utf8的二进制排序…我已经删除了它,它解决了问题,但我相信它可能会引入其他问题,例如blob。

关于mysql - mysql2 gem,Rails 3.0.3和“不兼容的字符编码”错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4920351/

10-15 15:57