我使用这里的代码将csv导入到mysql表中。它工作得很好,并且用括号去掉了所有的双引号。
我的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列-“文本文本”,123,“文本”特殊“文本”,456,“文本文本”
它导入为- text text,123,text "Special text,456,text text
我已经尝试了如下所示的转义方式,但无法让它删除内部的双引号。它是在wordpress环境中运行的,但是上面的代码可以工作(除了我的问题)。
任何想法、帮助或想法都是很棒的。
发布于 2020-03-15 03:55:23
尝试转义双引号,如下所示:
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)
发布于 2020-03-15 04:08:42
您向我们展示了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文件的地方,并尝试获得一个好的文件。
如果这是不可能的,并且您的文件没有在列值中嵌入任何逗号,您可以尝试使用这个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 '%"';
第一个查询去掉了“前导”符号,第二个去掉了尾随符号。
https://stackoverflow.com/questions/60685743
复制相似问题