Réécrivez le titre comme suit : Téléchargez sur MySQL à l'aide d'un fichier CSV avec une seule colonne contenant plusieurs lignes de texte, des guillemets doubles et des virgules.
P粉469090753
P粉469090753 2023-09-16 10:05:22
0
1
465

J'ai un problème pour télécharger des données vers la base de données MySQL.

Les données ressemblent à ceci :

review_id, utilisateur, texte

Une ligne typique ressemble à ceci :

12345,SomeCoolName,"this is my "awsome" comment.
some more text, and dome more.
and some "more""

Cela devrait être une ligne dans mon tableau.

J'ai du mal à télécharger ce contenu en raison de plusieurs lignes dans le champ de texte et de l'utilisation de virgules et de crochets. Des suggestions sur la façon de résoudre ce problème ?

Merci !

J'ai essayé d'utiliser certains manuels que j'ai trouvés sur le téléchargement de fichiers CSV dans une base de données, mais sans succès.

P粉469090753
P粉469090753

répondre à tous(1)
P粉165522886

Exemples de démonstration.

Contenu CSV source qui doit être importé :

review_id,user,text
123,John,This is
multiline 1, which
contains a comma.
456,Jim,This is
miltiline 2, which contains
commas, 'quote' chars and "double quote" chars.

Le tableau dans lequel ces données doivent être importées :

CREATE TABLE test (review_id INT, user VARCHAR(255), review_text TEXT);

Requête pour charger des données dans la table :

LOAD DATA INFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/test.csv'
INTO TABLE test
FIELDS TERMINATED BY '
DELETE t1
FROM test t1
JOIN test t2 USING (user)
WHERE t1.review_text < t2.review_text;
' ENCLOSED BY '' ESCAPED BY '' LINES TERMINATED BY '\r\n' IGNORE 1 LINES (@line) SET review_id = (@review_id := CASE WHEN @line REGEXP '^\d' THEN SUBSTRING_INDEX(@line, ',', 1) ELSE @review_id END ), user = (@user := CASE WHEN @line REGEXP '^\d' THEN SUBSTRING_INDEX(SUBSTRING_INDEX(@line, ',', 2), ',', -1) ELSE @user END ), review_text = (@review_text := CASE WHEN @line REGEXP '^\d' THEN SUBSTRING(@line FROM 2 + LENGTH(SUBSTRING_INDEX(@line, ',', 2))) ELSE CONCAT_WS(' ', @review_text, @line) END );

État des données du tableau après le chargement :

review_id Utilisateur review_text
123 Jean C'est
123 Jean Il s'agit de plusieurs lignes 1,
123 Jean Il s'agit de plusieurs lignes 1, contenant des virgules.
456 Jim C'est
456 Jim C'est la miltiline 2 qui contient
456 Jim Il s'agit de miltiline 2, qui contient des virgules, des caractères « guillemets » et des caractères « guillemets doubles ».

Liquidation :

rrreee

Statut des données du tableau final :

review_id Utilisateur review_text
123 Jean Il s'agit de plusieurs lignes 1, contenant des virgules.
456 Jim Il s'agit de miltiline 2, qui contient des virgules, des caractères « guillemets » et des caractères « guillemets doubles ».
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal