将CSV导入MySQL表时,如何从内部值中删除双引号

时间:2020-03-14 18:01:39

标签: php mysql string csv bulk-load

我在这里使用代码将csv导入mysql表。它很好用,并且ENCLOSED BY删除了所有双引号。

我的csv值类似于“文本”,123,“文本”,456,“文本”

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)

我刚刚发现一些值在主双引号内有双引号。

类似于此处的第三列-“文本”,123,“特殊文本”,456,“文本”

导入为-文本,123,文本“特殊文本,456,文本

我已经尝试过如图所示的ESCAPED BY,但是无法删除内部双引号。它是在wordpress环境中,但上面的代码确实有效(除了我的问题)。

任何想法帮助或想法都会很棒。

2 个答案:

答案 0 :(得分:0)

尝试像这样对双引号进行转义:

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)

答案 1 :(得分:0)

您通过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文件的位置,然后尝试获取一个好的CSV文件。

如果这不可能,并且您的文件的列值中没有嵌入任何逗号,则可以尝试执行此load命令,取消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 '%"';

第一个查询取下前导号,第二个查询取下尾标。