Maison  >  Questions et réponses  >  le corps du texte

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.

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粉469090753P粉469090753399 Il y a quelques jours433

répondre à tous(1)je répondrai

  • P粉165522886

    P粉1655228862023-09-17 00:57:56

    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 ».

    répondre
    0
  • Annulerrépondre