Bojoval jsem se správnou výměnou celého rozsahu znaků UTF-8 mezi Pythonem a MySQL kvůli Emoji a dalším znakům mimo kódový bod U+FFFF.
Abych se ujistil, že vše funguje správně, musel jsem udělat následující:
- ujistěte se, že
utf8mb4
byl použit proCHAR
,VARCHAR
aTEXT
sloupce v MySQL - vynutit UTF-8 v Pythonu
- vynutit použití UTF-8 mezi Pythonem a MySQL
Chcete-li v Pythonu vynutit UTF-8, přidejte následující řádek jako první nebo druhý řádek svého skriptu Python:
# -*- coding: utf-8 -*-
Chcete-li vynutit UTF-8 mezi Pythonem a MySQL, nastavte připojení MySQL následovně:
# 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()
Tímto způsobem nemusíte používat funkce jako encode
a utf8_encode
.