簡體   English   中英

將csv導入mysql表時如何從內部值中刪除雙引號

[英]How to remove double quotations from inside value when importing csv into mysql table

我正在使用此處的代碼將 csv 導入到 mysql 表中。 它工作得很好,並且 ENCLOSED BY 刪除了任何雙引號。

我的 csv 值就像 "text text",123,"text text",456,"text text"

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

我剛剛發現一些值在主雙引號內有雙引號。

像這里的第 3 列 - "text text",123,"text "Special" text",456,"text text"

其中導入為 - text text,123,text "Special text,456,text text

我已經嘗試了 ESCAPED BY,如圖所示,但無法刪除內部雙引號。 它在 wordpress 環境中,但上面的代碼確實有效(除了我的問題)。

任何想法幫助或想法都會很棒。

嘗試像這樣轉義雙引號:

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
OPTIONALLY ENCLOSED BY \'"\'
ESCAPED BY \'\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

您向我們展示了 CSV 文件中的這一行

"text text",123,"text "Special" text",456,"text text"

不幸的是,這不是格式良好的 CSV。 "列值內的字符必須被轉義。因此,要使該行格式正確,它必須看起來像其中之一。

"text text",123,"text ""Special"" text",456,"text text"
"text text",123,"text \"Special\" text",456,"text text"

如果這是我的項目,我會回到我得到這個壞 CSV 文件的地方,並嘗試得到一個好的。

如果這是不可能的,並且您的文件沒有在列值中嵌入任何逗號,您可以嘗試使用此加載命令, OPTIONALLY ENCLOSED BY子句。

LOAD DATA LOCAL INFILE "'.$file.'"
INTO TABLE '.$table.'
FIELDS TERMINATED by \',\'
ESCAPED BY \'"\'
LINES TERMINATED BY \'\r\n\'
(location,rating,board etc)

然后你會得到一些字符串值,它們的開頭和結尾都帶有"字符。你可以通過這樣的查詢來清理它

UPDATE table SET field = SUBSTRING(field,2) WHERE field LIKE '"%';
UPDATE table SET field = SUBSTRING(field, 1, LENGTH(field)-1) WHERE field LIKE '%"';

第一個查詢去掉前導 " 符號,第二個查詢去掉尾隨符號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM