搜尋

首頁  >  問答  >  主體

將標題重寫為:使用含有多行文字、雙引號和逗號的單列的CSV檔案上傳至MySQL

我在將資料上傳到 mysql 資料庫時遇到問題。

資料看起來像這樣:

review_id、使用者、文字

典型的行如下所示:

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

這應該是我表格中的一行。

由於文字欄位中有多行以及使用逗號和括號,我在上傳此內容時遇到問題。 關於如何處理這個問題有什麼建議嗎?

謝謝!

我嘗試使用一些我找到的有關將 csv 檔案上傳到資料庫的手冊,但沒有成功。

P粉469090753P粉469090753544 天前541

全部回覆(1)我來回復

  • P粉165522886

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

    演示範例。

    必須匯入的來源 CSV 內容:

    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.

    此資料必須匯入的表:

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

    將資料載入到表中的查詢:

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

    載入後表格資料狀態:

    review_id 用戶 review_text
    123 約翰 這是
    123 約翰 這是多行 1,
    123 約翰 這是多行 1,其中包含逗號。
    456 吉姆 這是
    456 吉姆 這是 miltiline 2,其中包含
    456 吉姆 這是 miltiline 2,其中包含逗號、「引號」字元和「雙引號」字元。

    清算:

    rrreee

    最終表資料狀態:

    review_id 用戶 review_text
    123 約翰 這是多行 1,其中包含逗號。
    456 吉姆 這是 miltiline 2,其中包含逗號、「引號」字元和「雙引號」字元。

    回覆
    0
  • 取消回覆