J'ai un gros fichier CSV que je vais le charger dans une table MySQL. Cependant, ces données sont codées au format utf-8, car elles incluent certains caractères non anglais. J'ai déjà défini le jeu de caractères de la colonne correspondante dans le tableau sur utf-8. Mais quand je charge mon fichier. les caractères non anglais se transforment en caractères étranges (lorsque je fais une sélection sur mes lignes de tableau). Dois-je encoder mes données avant de les charger dans la table? si oui, comment puis-je faire cela. J'utilise Python pour charger les données et utiliser la commande LOAD DATA LOCAL INFILE. Merci
comme indiqué dans http://dev.mysql.com/doc/refman/5.1/en/load-data.html , vous pouvez spécifier le jeu de caractères utilisé par votre fichier CSV avec le "CHARACTER SET" paramètre facultatif de LOAD DATA LOCAL INFILE
Essayer
LOAD DATA INFILE 'file'
IGNORE INTO TABLE table
CHARACTER SET UTF8
FIELDS TERMINATED BY ';'
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Vous devez envoyer
init_command = 'SET NAMES UTF8'
use_unicode = True
charset = 'utf8'
lors de l'exécution de MySQLdb.connect (), par ex.
dbconfig = {}
dbconfig['Host'] = 'localhost'
dbconfig['user'] = ''
dbconfig['passwd'] = ''
dbconfig['db'] = ''
dbconfig['init_command'] = 'SET NAMES UTF8'
dbconfig['use_unicode'] = True
dbconfig['charset'] = 'utf8'
conn = MySQLdb.connect(**dbconfig)
edit: ah, désolé, je vois que vous avez ajouté que vous utilisez "LOAD DATA LOCAL INFILE" - ce n'était pas clair à partir de votre question initiale :)
Vous n'avez pas besoin d'encoder vos caractères dans le fichier, mais vous devez vous assurer que votre fichier est encodé en UTF-8 avant de charger ce fichier dans la base de données.
Essayez quelque chose comme,
CHARGEZ LES DONNÉES LOCALES INFILE "fichier" DANS LA TABLE message_history CHARACTER SET UTF8 COLUMNS TERMINATED BY '|' FACULTATIVEMENT CLÔTURÉ PAR '"' ÉCHAPPÉ PAR '"';
Structure d'origine,