【问题标题】:mysql2 gem, Rails 3.0.3 and "incompatible character encodings" errorsmysql2 gem、Rails 3.0.3 和“不兼容的字符编码”错误
【发布时间】:2011-02-07 10:45:41
【问题描述】:

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

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

我到处都读到过这个,但我无法修复它。

application.rb:

config.encoding = "utf-8"

database.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)

【问题讨论】:

  • 对于其他搜索者:如果您使用 mysql2 和 blob 数据类型,它将始终返回二进制。只需将您的 blob 字段更改为“文本”数据类型。它将保持编码。

标签: mysql ruby-on-rails-3 character-encoding


【解决方案1】:

我有一个类似的问题:一个 varchar 字段,排序规则 utf8_bin 具有 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 文件中,有以下 sn-p:

if (fields[i].flags & BINARY_FLAG) {
  rb_enc_associate(val, binaryEncoding);
} else ...

我相信这是设置二进制 (ASCII-8BIT) 编码的地方,可能是因为 utf8_bin 排序规则...我已将其删除,它解决了问题,但我相信它可能会引入其他问题,例如 blob。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-13
  • 2012-07-13
  • 1970-01-01
  • 2017-02-24
  • 2014-08-16
  • 2011-05-26
  • 2011-12-14
相关资源
最近更新 更多