我在这里使用代码将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环境中,但上面的代码确实有效(除了我的问题)。
任何想法帮助或想法都会很棒。
答案 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 '%"';
第一个查询取下前导号,第二个查询取下尾标。