Jeg har kæmpet mig selv med den korrekte udveksling af hele rækken af UTF-8-tegn mellem Python og MySQL af hensyn til Emoji og andre karakterer ud over U+FFFF-kodepunktet.
For at være sikker på, at alt fungerede fint, var jeg nødt til at gøre følgende:
- sørg for
utf8mb4
blev brugt tilCHAR
,VARCHAR
ogTEXT
kolonner i MySQL - håndhæve UTF-8 i Python
- tving UTF-8 til brug mellem Python og MySQL
For at håndhæve UTF-8 i Python skal du tilføje følgende linje som første eller anden linje i dit Python-script:
# -*- coding: utf-8 -*-
For at gennemtvinge UTF-8 mellem Python og MySQL skal du konfigurere MySQL-forbindelsen som følger:
# 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()
På denne måde behøver du ikke bruge funktioner såsom encode
og utf8_encode
.