Как решить проблему с символами Unicode в mysql с помощью функции rails - PullRequest
0 голосов
/ 19 декабря 2018

Я получил ошибку Mysql2::Error: Incorrect string value: '\xE0\xA4\xAE\xE0\xA5\x81... в журнале при выполнении запроса.

Я определил причину ошибки - база данных MySql не полностью поддерживает символ Unicode.В некоторых блогах предлагается перенести базу данных в utf8mb4.

Но я хочу найти решение с минимальными изменениями, используя функции rails или ruby.Как мы можем использовать экранирование символа Юникод перед попыткой записи в БД?

Ответы [ 2 ]

0 голосов
/ 21 декабря 2018

Нет возможности экранировать данные.

, но мы можем установить тип кодирования utf8bin для определенного столбца в БД вместо переноса всего БД.

Добавить миграцию для изменения столбца

reversible do |dir|
      dir.up {
        change_column :transaction_details, :merchant, "VARCHAR(255) CHARACTER SET utf8 COLLATE utf8_bin"
      }
end
0 голосов
/ 19 декабря 2018

Для того, чтобы это работало, вам нужно две вещи:

  • Для всех символьных столбцов должен быть установлен тип utf8mb4
  • Соединение с базой данных должно быть encoding: utf8mb4 в вашемconfig/database.yml

Как только оба из них установлены, данные должны проходить правильно.Там нет никакой альтернативы, кроме как правильно установить кодировку.Вы не можете «избежать» их, так как они являются действительными данными, или это было бы, если тип столбца utf8mb4.Ядро базы данных MySQL отклоняет их как недопустимые для этой кодировки.

MySQL поддерживает 4-байтовый UTF-8 тогда и только тогда, когда вы устанавливаете кодировку как utf8mb4.Это необычно, поскольку другие базы данных, такие как Postgres, делают это «из коробки» без различия между 1-3-байтовым UTF-8 и 4-байтовым UTF-8.

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