Maison > Questions et réponses > le corps du texte
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粉1655228862023-09-17 00:57:56
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 :
rrreeeStatut 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 ». |