2017-06-22 1 views
0

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?

Répondre

1

Vous devriez essayer de régler le codage UTF8 lors de la connexion à la base de données en faisant quelque chose comme ceci:

db1 = MySQLdb.connect (
host="host1", 
user="user1", 
passwd="secret", 
db="db1" 
use_unicode=True, 
charset="utf8" 
)