Почему ActiveRecord возвращает поля, закодированные как ASCII-8BIT, даже с mysql2 gem? - PullRequest
7 голосов
/ 25 октября 2011

Я получаю эту ошибку в Ruby 1.9, Rails 3.0, ActiveRecord 3.0:

incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string)

Это происходит потому, что строка, для которой я пытаюсь вызвать gsub (которая поступает непосредственно из поля объекта ActiveRecord), имеет кодировку ASCII-8BIT. Я прочитал несколько статей, постов и ответов о том, что это вызвано тем, что mysql gem неправильно кодирует объекты, и предлагает mysql2.

Но я уже использую mysql2. Я пробовал версию 0.2.x и последнюю версию 0.3.7, но ни одна из них не решила проблему:

irb> str = Discussion.first.content
=> "Something's wrong with encodings..." 
irb> str.encoding
=> #<Encoding:ASCII-8BIT> 

Я изменил кодировку базы данных и кодировки таблиц в MySQL, также я попытался установить переменную LANG env безуспешно. Где-нибудь еще я могу посмотреть или понять, почему я получаю эту неправильную кодировку?

Ответы [ 2 ]

8 голосов
/ 25 октября 2011

Aha!Моя поверхностность знаний поражает снова.Проблема действительно была в файле database.yml:

development:
  encoding: utf8
  adapter: mysql2
  [...]

Я все еще использовал adapter: mysql, поэтому, хотя гем mysql2 был установлен, он не использовался .Я не понимал, что мне придется сменить название на database.yml;Я думал, что заменит старый mysql драгоценный камень.

Теперь мы все знаем!:)

1 голос
/ 25 октября 2011

Правильно ли настроена кодировка соединения в config/database.yml?

development:
  encoding: utf8
...