Эта проблема возникла как проблема «несовместимых кодировок символов: ASCII-8BIT и UTF-8», но это , а не , о чем я спрашиваю.Скорее, я обнаружил, что эта проблема происходит, потому что определенные поля моей базы данных помечаются как ASCII-8BIT, когда они извлекаются, в то время как большинство из них правильно отображаются как UTF-8.
Например, в таблице со столбцами country
и nationality
, где оба столбца в строке 16 имеют одинаковые значения (скопированы и вставлены), я получаю
irb(main):003:0> c = Country.find(16)
irb(main):004:0> puts "#{c.name}, #{c.name.encoding}, #{c.name.bytes.to_a}"
�land Islands, UTF-8, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]
irb(main):005:0> puts "#{c.nationality}, #{c.nationality.encoding}, #{c.nationality.bytes.to_a}"
�land Islands, ASCII-8BIT, [195, 133, 108, 97, 110, 100, 32, 73, 115, 108, 97, 110, 100, 115]
Аналогично, простой puts name
дает �land Islands
, в то время как для nationality
он дает "\xC3\x85land Islands"
- одни и те же байты, другое представление.
Кодировка для данного столбца представляется постоянной независимо от того, является ли строкаимеет не-ascii символы, так что это не просто проблема со строкой.То есть все значения в nationality
интерпретируются как ascii, а все , как в name
как UTF-8.
Проблема не ограничиваетсяодной таблицы, и я не нашел ни одного шаблона, по которому столбцы будут распознаны неправильно.
Вот параметры и среда:
- Rails 3.0.0 в Windows 7 64-бит
- Адаптер базы данных: mysql2 и mysql показывают одинаковое поведение
- Database.yml включает
encoding: utf8
- application.rb включает в себя
config.encoding = "utf-8"
- MySQLбаза данных, таблица и оба столбца определены как utf8
- Оба столбца в MySQL - это varchar, 255, допустимо пустое значение
- Я могу воспроизвести проблему при новой установке Rails и ничего, кроме Countryопределена модель для доступа к базе данных.Я еще не пробовал использовать свежую однострочную базу данных.
Кто-нибудь знает, что здесь происходит?