Zmagałem się z poprawną wymianą pełnego zakresu znaków UTF-8 między Pythonem a MySQL ze względu na Emoji i inne znaki spoza punktu kodowego U+FFFF.
Aby mieć pewność, że wszystko działa dobrze, musiałem wykonać następujące czynności:
- upewnij się, że
utf8mb4
został użyty dlaCHAR
,VARCHAR
iTEXT
kolumny w MySQL - wymuszaj UTF-8 w Pythonie
- wymuszaj używanie UTF-8 między Pythonem a MySQL
Aby wymusić UTF-8 w Pythonie, dodaj następujący wiersz jako pierwszy lub drugi wiersz skryptu Pythona:
# -*- coding: utf-8 -*-
Aby wymusić UTF-8 między Pythonem a MySQL, skonfiguruj połączenie MySQL w następujący sposób:
# 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()
W ten sposób nie musisz używać funkcji takich jak encode
i utf8_encode
.