我正在使用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)
答案 0 :(得分:3)
我遇到了类似的问题: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
文件中,有以下代码段:
if (fields[i].flags & BINARY_FLAG) {
rb_enc_associate(val, binaryEncoding);
} else ...
我相信这是设置二进制(ASCII-8BIT)编码的地方,也许是因为utf8_bin整理...我已经删除它,它解决了问题,但我相信它可能会介绍其他问题,例如blob。