MySQL неверное строковое значение ошибки в MySQL 5.7, но не в 5.5

В приложении PHP я пытаюсь сохранить содержимое электронного письма в базе данных (таблица utf8mb4 и сопоставление utf8mb4_general_ci). При выполнении тестов в моей среде разработки он работает нормально, но на производствах я продолжаю получать ошибки, подобные этой:

General error: 1366 Incorrect string value: '\xC7ALHO-...' for column 'content_html' at row 1

Я проверил и понял, что у меня MySQL 5.5 на dev и 5.7 на prod, я обновил mysql на своем dev и теперь я получаю ошибку и на dev.
Проблема в том, что я не понимаю, почему я получаю эти ошибки, это очень стандартное электронное письмо, в котором нет ничего, кроме логотипа заголовка.
Любая идея, почему это не работает на 5.7, а не на 5.5, и если есть какие-либо обходные пути по этому поводу?

Обновление: вот ПОКАЗАТЬ ПОЛНЫЕ КОЛОННЫ таблицы

ysql> SHOW FULL COLUMNS FROM received_email;
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| Field           | Type         | Collation          | Null | Key | Default | Extra          | Privileges                      | Comment |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+
| id              | int(11)      | NULL               | NO   | PRI | NULL    | auto_increment | select,insert,update,references |         |
| skill_id        | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
| agent_id        | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
| message_id      | longtext     | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| received_date   | datetime     | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
| downloaded_date | datetime     | NULL               | NO   |     | NULL    |                | select,insert,update,references |         |
| from_name       | varchar(255) | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| from_email      | varchar(255) | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| subject         | longtext     | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| content_html    | longtext     | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| content_plain   | longtext     | utf8mb4_unicode_ci | YES  |     | NULL    |                | select,insert,update,references |         |
| recipient       | varchar(255) | utf8mb4_unicode_ci | NO   |     | NULL    |                | select,insert,update,references |         |
| created_at      | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
| updated_at      | datetime     | NULL               | YES  |     | NULL    |                | select,insert,update,references |         |
| case_detail_id  | int(11)      | NULL               | YES  | MUL | NULL    |                | select,insert,update,references |         |
+-----------------+--------------+--------------------+------+-----+---------+----------------+---------------------------------+---------+

заранее спасибо

1

Решение

Я думаю, что это 2 вещи, которые вы можете проверить …

1) кодировка содержимого электронной почты

  • Что такое кодировка содержимого электронной почты … UTF-8 тоже?

  • если нет, вы пытались преобразовать его в UTF-8?

2) режим sql — есть некоторые изменения по умолчанию с MySql 5.5 до 5.7

больше информации вы можете найти:
https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html
https://serverpilot.io/community/articles/how-to-disable-strict-mode-in-mysql-5-7.html

2

Другие решения

Укажите, что ваш клиент имеет latin1 байт. Сделайте это в строке подключения или сразу через SET NAMES latin1,

MySQL преобразует C7 в эквиваленте utf8 «на проводе».

Не используйте какие-либо функции преобразования, которые могут только усугубить ситуацию или, по крайней мере, затруднить ее раскрытие.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector