mysql2 gem, Rails 3.0.3 и ошибки "несовместимые кодировки символов" - PullRequest
3 голосов
/ 07 февраля 2011

Я использую 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)

1 Ответ

3 голосов
/ 16 февраля 2011

У меня похожая проблема: поле varchar с сопоставлением utf8_bin с кодировкой ASCII-8BIT.

Проблема заключается в геме mysql2, а не в Rails или в настройках mysql, по крайней мере, в моем случае, потому что это не происходит с гемом ruby-mysql.

Пожалуйста, проверьте, исчезла ли проблема при переключении на ruby-mysql.

Следующий код, запущенный из irb на ruby ​​1.9.2, демонстрирует проблему:

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 в файле result.c в строке 253 есть следующий фрагмент:

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

Я полагаю, что именно здесь задается двоичная (ASCII-8BIT) кодировка, возможно, из-за сортировки utf8_bin ... Я удалил ее, и это решило проблему, но я уверен, что она, вероятно, представит другие проблемы, например, с каплями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...