Je souhaite importer un fichier .csv dans la base de données MySQL en:
load data local infile 'C:\\Users\\t_lichtenberger\\Desktop\\tblEnvironmentLog.csv'
into table tblenvironmentlog
character set utf8
fields terminated by ';'
lines terminated by '\n'
ignore 1 lines;
Mais j'obtiens l'erreur suivante et je ne peux pas expliquer pourquoi:
Error Code: 1300. Invalid utf8 character string: 'M'
Aucune suggestion?
Découvrez les paramètres de l'exportation . Recherchez "UTF-8".
Ceci suggère que le "texte tronqué" est dû au fait que les données ne sont pas codées en utf8mb4. En dehors de MySQL, "recherchez" UTF-8 "(à l'intérieur, MySQL, utf8 et utf8mb4 fonctionnent également bien pour tous les jeux de caractères européens, donc le ü
ne devrait pas être un problème.
S'il a été exporté en tant que "cp1252" (ou l'un des nombreux codages), l'octet de ü
ne serait pas valide pour utf8mb4, ce qui entraînerait une troncature.
Si cette analyse est correcte, il existe deux solutions:
Plan A: exporter en tant que UTF-8
.
Plan B: importation en tant que latin1
. (Vous n'avez pas besoin de modifier la définition de la colonne/table, juste le LOAD DATA
.)
Rien d'autre que j'ai essayé n'a fonctionné pour moi, y compris la garantie que mon .csv a été enregistré avec l'encodage UTF-8.
Cela a fonctionné:
Lors de l'utilisation de LOAD DATA LOCAL INFILE
, ensemble CHARACTER SET latin1
au lieu de CHARACTER SET utf8mb4
comme indiqué dans https://dzone.com/articles/mysql-57-utf8mb4-and-the-load-data-infile
Voici un exemple complet qui a fonctionné pour moi:
TRUNCATE Homestead_daily.answers;
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE Homestead_daily.questions;
SET FOREIGN_KEY_CHECKS = 1;
LOAD DATA LOCAL INFILE 'C:/Users/me/Desktop/questions.csv' INTO TABLE Homestead_daily.questions
CHARACTER SET latin1
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(type, question, created_at, updated_at);
SELECT * FROM Homestead_daily.questions;
Ouvrez simplement le fichier csv dans votre éditeur de texte (comme Notepad ++)
et changez le fichier Encoding en UTF-8
puis importez votre fichier csv
Il se plaint de 'M'
mais je pense que c'est dans München
et le caractère problématique est le suivant, le tréma 'ü'
.
Une façon simple de tester serait d'essayer de charger un fichier avec seulement les 2 premières lignes et de voir si cela fonctionne. Ajoutez ensuite la 3e ligne, réessayez et voyez si cela échoue.
Si vous ne pouvez pas ou ne voulez pas remplacer ces caractères spéciaux dans vos données, vous devrez alors commencer à enquêter sur les jeux de caractères configurés dans votre fichier CSV, base de données, table, colonnes, outils, etc.
Utilisez-vous MySQL 5.7 ou supérieur? Alors quelque chose de simple à essayer serait de passer à character set utf8mb4
dans votre load data
commande.
Voir Comment MySQL 5.7 gère 'utf8mb4' et le fichier de données de chargement pour un problème similaire.
Regarde aussi:
Problème avec les caractères utf8; ce que je vois n'est pas ce que j'ai stocké
"Valeur de chaîne incorrecte" lorsque vous essayez d'insérer UTF-8 dans MySQL via JDBC?