將標題重寫為:使用含有多行文字、雙引號和逗號的單列的CSV檔案上傳至MySQL
P粉469090753
P粉469090753 2023-09-16 10:05:22
0
1
459

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

資料看起來像這樣:

review_id、使用者、文字

典型的行如下所示:

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

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

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

謝謝!

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

P粉469090753
P粉469090753

全部回覆(1)
P粉165522886

演示範例。

必須匯入的來源 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,其中包含逗號、「引號」字元和「雙引號」字元。
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!