Rumah  >  Soal Jawab  >  teks badan

Tulis semula tajuk ke: Muat naik ke MySQL menggunakan fail CSV dengan satu lajur yang mengandungi berbilang baris teks, petikan berganda dan koma

Saya menghadapi masalah memuat naik data ke pangkalan data mysql.

Data kelihatan seperti ini:

review_id, pengguna, teks

Barisan biasa kelihatan seperti ini:

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

Ini sepatutnya menjadi satu baris dalam jadual saya.

Saya menghadapi masalah memuat naik kandungan ini kerana berbilang baris dalam medan teks dan penggunaan koma dan kurungan. Sebarang cadangan tentang cara menangani isu ini?

Terima kasih!

Saya cuba menggunakan beberapa manual yang saya temui tentang memuat naik fail csv ke pangkalan data, tetapi tidak berjaya.

P粉469090753P粉469090753399 hari yang lalu435

membalas semua(1)saya akan balas

  • P粉165522886

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

    Contoh demo.

    Sumber kandungan CSV yang mesti diimport:

    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.

    Jadual data ini mesti diimport ke dalam:

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

    Pertanyaan untuk memuatkan data ke dalam jadual:

    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 );

    Status data jadual selepas dimuatkan:

    review_id Pengguna teks_semakan
    123 John Ini ialah
    123 John Ini berbilang baris 1,
    123 John Ini ialah berbilang baris 1, mengandungi koma.
    456 Jim Ini ialah
    456 Jim Ini adalah miltiline 2 yang mengandungi
    456 Jim Ini ialah miltiline 2, yang mengandungi koma, aksara "petikan" dan aksara "petikan berganda".

    Pencairan:

    rrreee

    Status data jadual akhir:

    review_id Pengguna teks_semakan
    123 John Ini ialah berbilang baris 1, mengandungi koma.
    456 Jim Ini ialah miltiline 2, yang mengandungi koma, aksara "petikan" dan aksara "petikan berganda".

    balas
    0
  • Batalbalas