Ответ 1
Он работает, если вы запустите ALTER TABLE your_database_name.your_table CONVERT TO CHARACTER SET utf8
вместо запроса к обновленному набору символов в базе данных выше.
Решение - это прикрепленный пост, в самом конце.
У меня есть приложение для рельсов. Иногда, когда пользователь пишет в текстовом поле и выполняется запрос для обновления этого поля в базе данных MySQL, я получаю этот журнал ошибок:
UPDATE boats SET описание = 'Vive la experencia única de navegar abordo de un clásico de madera de lujo como Mako. Te emocionará. ', Updated_at =' 2015-03-10 20:10:32 'WHERE boats.id = 1
E, [2015-03-10T20:10:32.223430 #20343] ERROR -- : Mysql2::Error: Incorrect string value: '\xE2\x80\xA8\x09Te...' for column 'description' at row 1: UPDATE boats SET description = 'Vive la experiencia única de navegar abordo de un clásico de madera de lujo como Mako.
Te emocionará.', updated_at = '2015-03-10 20:10:32' WHERE boats.id = 1
ПРИМЕЧАНИЕ. Извините, я не могу поставить код выше как код. Должен быть особый характер.
Я бы хотел, чтобы пользователь мог добавить любого персонажа без ошибок.
У меня есть среда разработки и производства. Ошибка происходит только в процессе производства.
Я видел это сообщение, которое выглядит той же проблемой, что и моя: Mysql2 :: Ошибка: неправильное строковое значение
Я запускаю этот запрос для show variables like 'char%';
для проверки конфигурации символа базы данных и: Разработка:
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'utf8'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'utf8'
'character_set_system', 'utf8'
'character_sets_dir', '/usr/local/Cellar/mysql/5.6.19/share/mysql/charsets/'
Производство:
'character_set_client', 'utf8'
'character_set_connection', 'utf8'
'character_set_database', 'latin1'
'character_set_filesystem', 'binary'
'character_set_results', 'utf8'
'character_set_server', 'latin1'
'character_set_system', 'utf8'
'character_sets_dir', '/usr/share/mysql/charsets/'
Итак, я выполнил ALTER DATABASE yanpyprod CHARACTER SET utf8 COLLATE utf8_general_ci;
для обновления моего набора символов базы данных до utf8.
Однако после того, как набор charecter изменился на utf8, я все равно получаю ту же ошибку.
Он работает, если вы запустите ALTER TABLE your_database_name.your_table CONVERT TO CHARACTER SET utf8
вместо запроса к обновленному набору символов в базе данных выше.
Решение - это прикрепленный пост, в самом конце.
Есть два способа преодолеть это
Варианты 1
Как в принятом ответе:
ALTER TABLE your_database_name.your_table CONVERT TO CHARACTER SET utf8;
Вариант 2
Если вам нужно сохранить набор символов по умолчанию для таблицы, вы можете изменить определенное поле или набор полей, с которыми возникла проблема.
У меня та же проблема с двумя полями в таблице, и эти поля хранят содержимое из значений полей расширенного текста. Эти поля используются для ввода HRML, а также для некоторого содержимого, которое вызывает ошибку.
Поэтому, если проблема заключается только в поле или наборе полей, вы можете установить набор символов для этого конкретного поля, можно использовать следующий тип запроса ALTER, чтобы установить набор символов для поля.
ALTER TABLE your_db_name.table_name MODIFY COLUMN column_name text CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL;
ПРИМЕЧАНИЕ. Обновите соответствующие имена и значения в соответствии с вашими требованиями, соответствующими окружающей среде. Здесь нужно выделить только одно: CHARACTER SET utf8
Добавление опции encoding: latin1
в ActiveRecord решило эту проблему для меня.
Также я нашел этот обходной путь, который заставляет mysql рассматривать latin1 как utf-8:https://github.com/rails/rails/issues/9834#issuecomment-15210861