pymysql.err.InternalError: (1366, "Incorrect string value: '\\xF0\\x9F\\x8F\\xB3\\xEF\\xB8…'

113
08 июля 2021, 14:20

Всех приветствую ! Я парсю этот новостной ресурс.После чего спарщенные данные(заголовок,дата,текстовой контент) заношу в БД.И вот при парсинге этой страницы .

У меня Pymysql(библиотека которую я использую для insert'a в БД) ругается на текстовой контент страницы. Судя по traceback:

pymysql.err.InternalError: (1366, "Incorrect string value: '\xF0\x9F\x8F\xB3\xEF\xB8...' for column 'item_text_content' at row 1")

Вот текстовой контент на которую ругается Pymysql:

This a wedding party for girl who is under 13 years old. I cried when I received this video from Bahmai County which is a county in Kohgiluyeh and Boyer-Ahmad Province in Iran. Under Islamic laws 13 year old girl can marry but cannot chose her dress code. pic.twitter.com/gqIQZDUcju — Masih Alinejad

Answer 1

Взято отсюда stackoverflow.com Мой вольный перевод схожей проблемы, правда там коннект через JDBC, но смысл тот-же.

Теория

Utf8 в MySQL's допускает только сиволы Unicode, они должны быть представлены 3 байтами в UTF-8. Здесь вы имеете символ требующий 4 байт.

Если версия вашего MySQL 5.5 или более поздняя вы можете изменить кодировку вашего поля с utf8 на utf8mb4. Эта кодировка поддерживает хранение 4 байт в UTF-8.

Вы также можете задать параметр сервера character_set_server как utf8mb4 в конфигурационном файле MySQL. Это выглядит так connector-j-reference-charsets

Два примера решения с рестартом базы и без

Решение 1.

  1. Измените файл my.cnf как в примере

    [mysql]

    default-character-set=utf8mb4

    [mysqld]

    character-set-server=utf8mb4

    collation-server=utf8mb4_unicode_ci

это поможет быть уверенным, что база данных и character_set_client, character_set_connection, character_set_results используют utf8mb4 по умолчанию.

2 Перезапустите MySQL

3 Измените кодировку таблицы и столбца на utf8mb4

4 НЕ ЗАДАВАЙТЕ кодировку в своём подключении, потому-что это переопределит character_set_client, character_set_connection, character_set_results в utf8

============================

Решение 2 (без рестарта)

1 Измените кодировку таблицы и столбца на utf8mb4

2 используйте кодировку UTF-8 в вашем подключении

3 Пишите ваши sql команды как в примере ниже 'SET NAMES utf8mb4;INSERT INTO Mytable ...';

В этой теме есть комментарий, что второй способ сработал для insert'a. Так же там есть инструкция как верно сделать select.

READ ALSO
Перебор значений JSON PHP

Перебор значений JSON PHP

Есть два запроса в формате JSON:

138
Insert into в sql

Insert into в sql

Имеется вот такой простенький код

97
Ошибка в роутинге

Ошибка в роутинге

Хотел сделать роутинг на чистом php, но потом меня черт дернул установить symfony/router и теперь я чувствую себя идиотоиУ меня проблема с подключением...

125
Мулти Файл аплоадер, ошибка

Мулти Файл аплоадер, ошибка

Имеется такой код

102