J'ai un journal d'événements CSV non normalisé d'un client que j'essaie de charger dans une table MySQL afin de pouvoir le refactoriser dans un format sain. J'ai créé une table appelée «CSVImport» qui a un champ pour chaque colonne du fichier CSV. Le CSV contient 99 colonnes, donc c'était une tâche assez difficile en soi:
CREATE TABLE 'CSVImport' (id INT);
ALTER TABLE CSVImport ADD COLUMN Title VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN Company VARCHAR(256);
ALTER TABLE CSVImport ADD COLUMN NumTickets VARCHAR(256);
...
ALTER TABLE CSVImport Date49 ADD COLUMN Date49 VARCHAR(256);
ALTER TABLE CSVImport Date50 ADD COLUMN Date50 VARCHAR(256);
Aucune contrainte n'est sur la table, et tous les champs contiennent des valeurs VARCHAR (256), à l'exception des colonnes qui contiennent les nombres (représentés par INT), oui / non (représentés par BIT), les prix (représentés par DECIMAL) et les textes textuels ( représenté par TEXT).
J'ai essayé de charger des données dans le fichier:
LOAD DATA INFILE '/home/paul/clientdata.csv' INTO TABLE CSVImport;
Query OK, 2023 rows affected, 65535 warnings (0.08 sec)
Records: 2023 Deleted: 0 Skipped: 0 Warnings: 198256
SELECT * FROM CSVImport;
| NULL | NULL | NULL | NULL | NULL |
...
La table entière est remplie de NULL
.
Je pense que le problème est que les textes de texte contiennent plus d'une ligne, et MySQL analyse le fichier comme si chaque nouvelle ligne correspondait à une ligne de base de données. Je peux charger le fichier dans OpenOffice sans problème.
Le fichier clientdata.csv contient 2593 lignes et 570 enregistrements. La première ligne contient les noms des colonnes. Je pense qu'il est délimité par des virgules, et le texte est apparemment délimité par des guillemets doubles.
METTRE À JOUR:
En cas de doute, lisez le manuel: http://dev.mysql.com/doc/refman/5.0/en/load-data.html
J'ai ajouté quelques informations à la LOAD DATA
déclaration selon laquelle OpenOffice était suffisamment intelligent pour en déduire, et maintenant il charge le nombre correct d'enregistrements:
LOAD DATA INFILE "/home/paul/clientdata.csv"
INTO TABLE CSVImport
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;
Mais il y a encore beaucoup d' NULL
enregistrements complets , et aucune des données chargées ne semble être au bon endroit.