Как кодировать (utf8mb4) в Python
как кодировать что-то в ut8mb4 в Python?
у меня есть два набора данных: данные, которые я переношу в свою новую базу данных MySQL из Parse, и данные, идущие вперед (это говорит только с моей новой базой данных). Моя база данных utf8mb4 для хранения emoji и акцентированных букв.
первый набор данных отображается правильно (когда задействованы emoji и акценты), когда у меня есть в моем скрипте python:
MySQLdb.escape_string(unicode(xstr(data.get('message'))).encode('utf-8'))
и при чтении из базы данных MySQL в PHP:
$row["message"] = utf8_encode($row["message"]);
второй набор данных отображается только правильно (когда emoji и акценты участвуют), когда я не включаю utf8_encode($row["message"])
часть. Я пытаюсь согласовать их, чтобы оба набора данных были правильно возвращены в мое приложение iOS. Пожалуйста, помогите!
3 ответов
в MySQL utf8mb4
кодирование is просто стандартный UTF-8.
они должны были добавить это имя, однако, чтобы отличить его от сломанные UTF - 8 набор символов который поддерживает только символы BMP.
другими словами, вы всегда должны кодировать UTF-8 при разговоре с MySQL, но учитывайте, что база данных не может обрабатывать кодовые точки Unicode за пределами U+FFFF, если вы не используете utf8mb4
on стороны в MySQL.
вообще говоря, вы хотите избежать ручного кодирования и декодирования. Настройте соединение и параметры сортировки для обработки Unicode. Для MySQLdb
, это означает, что параметр charset='utf8'
(установка use_unicode=True
и ручки SET NAMES
и SET character_set_connection
), затем обработайте весь текст на стороне Python как текст Unicode.
я боролся с правильным обменом полным диапазоном символов UTF-8 между Python и MySQL ради Emoji и других символов за пределами кодовой точки U+FFFF.
чтобы убедиться, что все работает нормально, я должен был сделать следующее:
- убедится
utf8mb4
используется дляCHAR
,VARCHAR
иTEXT
столбцы в MySQL - применение UTF-8 в Python
- применение UTF-8 для использования между Python и В MySQL
чтобы применить UTF-8 в Python, добавьте следующую строку в качестве первой или второй строки вашего скрипта Python:
# -*- coding: utf-8 -*-
чтобы применить UTF-8 между Python и MySQL, настройте соединение MySQL следующим образом:
# Connect to mysql.
dbc = MySQLdb.connect(host='###', user='###', passwd='###', db='###', use_unicode=True)
# Create a cursor.
cursor = dbc.cursor()
# Enforce UTF-8 for the connection.
cursor.execute('SET NAMES utf8mb4')
cursor.execute("SET CHARACTER SET utf8mb4")
cursor.execute("SET character_set_connection=utf8mb4")
# Do database stuff.
# Commit data.
dbc.commit()
# Close cursor and connection.
cursor.close()
dbc.close()
таким образом, вам не нужно использовать функции, такие как encode
и utf8_encode
.
use_unicode=True
не работает для меня.
мое решение
- в mysql измените всю базу данных, таблицу и кодировку полей на utf8mb4
MySQLdb.connect(host='###' [...], charset='utf8'
dbCursor.execute('SET NAMES utf8mb4')
dbCursor.execute("SET CHARACTER SET utf8mb4")