Проблемы со вставкой смайликов в базу данных с помощью mysql.connector на python

#python #mysql #database #character-encoding #utf8mb4

Вопрос:

Как описано в названии, у меня возникла проблема с вставкой смайликов в базу данных MariaDB с помощью mysql.connector модуля на python.

Когда я пытаюсь вставить данные, содержащие смайлики, в базу данных с помощью python, все смайлики просто заменяются знаками вопроса. Я также убедился, что смайлики работают на python, выводя их на консоль перед вставкой в базу данных.

Вставка смайликов через phpMyAdmin больше не является проблемой после того, как я изменил параметры сортировки в базе данных на utf8mb4_general_ci . Таким образом, я мог убедиться, что с базой данных нет проблем.

Если это как-то поможет, данные, которые я вставляю, поступают из API steam и состоят из псевдонимов.

Теперь я хотел бы знать, знает ли кто-нибудь, как я могу решить эту проблему.

Надеюсь, я не забыл ни одной важной информации.

Комментарии:

1. Отличная работа с вашим первым вопросом! Спасибо.

Ответ №1:

Вы правы, что эмодзи представимы в Юникоде. Вы не забыли установить набор символов подключения и параметры сортировки в своей программе на Python?

Что-то подобное может помочь сразу же, как только вы откроете соединение.

 cnx = mysql.connector.connect(user='JonaWe', database='test',
                              use_unicode=True,
                              charset='utf8mb4,
                              collation='utf8mb4_general_ci',
                              etcetera)
cnx.set_charset_collation('utf8mb4', 'utf8mb4_general_ci')
 

Соединение между Python и MySQL может искажать содержимое utf8mb4 вашего смайлика.

Комментарии:

1. Я не знал, что мне тоже нужно было изменить параметры сортировки кодировки в пайтоне. Я попробовал это и использование 'utf8mb4' и 'utf8mb4_general_ci' в качестве параметра привело к следующей ошибке: unknown encoding: utf8mb4 . Затем я попытался удалить первый параметр, но без этого он мгновенно разбился.

2. Вставка работает сейчас, но как только я пытаюсь выбрать какую-то дату, я получаю неизвестную кодировку: ошибка utf8mb4.