gpt4 book ai didi

mysql2 gem、Rails 3.0.3 和 "incompatible character encodings"错误

转载 作者:可可西里 更新时间:2023-11-01 08:22:02 25 4
gpt4 key购买 nike

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

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

我到处都读到过这方面的内容,但我无法设法修复它。

application.rb:

config.encoding = "utf-8"

数据库.yml:

development:   
adapter: mysql2
encoding: utf8
database: rails3_development
username: root
password:
host: localhost

gem :

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 的 result.c 文件的第 253 行,有以下片段:

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

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

关于mysql2 gem、Rails 3.0.3 和 "incompatible character encodings"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4920351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com