Je dois insérer dans une base de données MySQL 5.7 des chaînes avec plusieurs caractères non-ASCII, comme è
ou …
ou même d'autres alphabets, en utilisant un script Python3
. J'ai converti toutes les colonnes du tableau intéressé en utf8mb4
.Encodage de chaîne avec Python et MySQL
Connexion avec
db1 = MySQLdb.connect (
host="host1",
user="user1",
passwd="secret",
db="db1"
)
cursor1 = db1.cursor()
cursor1.execute("USE db1")
Je peux stocker correctement les chaînes avec è
. Cordes avec …
générer au lieu l'erreur suivante:
UnicodeEncodeError: 'latin-1' codec can't encode character '\u2026' in position 1022: ordinal not in range(256)
vice-versa, la connexion avec
db1 = MySQLdb.connect (
host="host1",
user="user1",
passwd="secret",
db="db1"
)
cursor1 = db1.cursor()
cursor1.execute("USE db1")
cur.execute("SET NAMES utf8mb4;")
cur.execute("SET CHARACTER SET utf8mb4;")
cur.execute("SET character_set_connection=utf8mb4;")
une erreur due à è
est généré:
_mysql_exceptions.OperationalError: (1366, "Incorrect string value: '\\xE8 string...' for column 'column1' at row 1")
è
a code hexadécimal E8
.
Qu'est-ce qui ne va pas?