Comment importer un fichier CSV dans une table MySQL ?
P粉785957729
P粉785957729 2023-10-09 14:59:12
0
2
633

J'ai un fichier CSV de journal d'événements non normalisé d'un client que j'essaie de charger dans une table MySQL afin qu'il puisse être reconstruit dans un format normal. J'ai créé une table appelée "CSVImport" avec un champ pour chaque colonne du fichier CSV. Le CSV contient 99 colonnes, c'est donc une tâche ardue 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);

Il n'y a aucune contrainte sur la table, tous les champs contiennent des valeurs VARCHAR(256) sauf count (représenté par INT), oui/non (représenté par BIT), prix (représenté par DECIMAL) et description textuelle (représentée par TEXT) .

J'ai essayé de charger les données dans un 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 remplieNULL.

Je pense que le problème est que l'introduction du texte contient plus d'une ligne et que MySQL analyse le fichier comme si chaque nouvelle ligne correspondait à une ligne de la base de données. Je peux charger le fichier dans Open sans aucun problème.

Le fichier

clientdata.csv contient 2593 lignes et 570 enregistrements. La première ligne contient les noms de colonnes. Je pense qu'il est délimité par des virgules et le texte est évidemment délimité par des guillemets doubles.

Mise à jour :

Si vous avez des questions, veuillez lire le manuel : http://dev.mysql.com/doc/refman/5.0/en/load-data.html

J'ai ajouté quelques informations à la déclaration LOAD DATA, suffisamment intelligentes pour en déduire, et maintenant elle 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'enregistrements complètement NULL, et aucune des données chargées ne semble être au bon endroit.

P粉785957729
P粉785957729

répondre à tous(2)
P粉057869348

Utilisez mysqlimport pour charger la table dans la base de données : p>

mysqlimport --ignore-lines=1 \
            --fields-terminated-by=, \
            --local -u root \
            -p Database \
             TableName.csv

Je l'ai trouvé sur http://chriseiffel.com/everything-linux/how-to-import-a-large-csv-file-to-mysql/

Pour faire du séparateur un onglet, utilisez --fields-termerated-by='t'

P粉210405394

Le cœur du problème semble être la correspondance des colonnes du fichier CSV avec les colonnes du tableau.

De nombreux clients graphiques MySQL ont de très belles boîtes de dialogue d'importation pour ce genre de choses.

Mon travail préféré est basé sur Windows HeidiSQL. Il vous fournit une interface graphique pour créer des commandes LOAD DATA ; vous pourrez ensuite la réutiliser par programme.

Capture d'écran : boîte de dialogue "Importer un fichier texte"

Pour ouvrir la boîte de dialogue Importer un fichier texte, accédez à 工具 > 导入 CSV 文件 : 

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!