首页 > 解决方案 > 当第一行被“包围”时,MySQL LOAD DATA LOCAL INFILE 什么都不做

问题描述

以下 MySql Query 完全没有任何作用

LOAD DATA
LOCAL INFILE 'path/to/file.csv'
REPLACE INTO
TABLE `db`.`table`
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
    `id`,
    `name`
);

CSV 文件如下:

"id","name"
"1","Lorem"
"2","Ipsum"
"3","Dolor"
"4","Sit"
"5","Amet"
"6","consectetur "
"7","adipisci"
"8","velit"
"9","sed"
"10","quia"

我检查了行分隔符是 LF,文件编码是 UTF-8。

我注意到,如果我清空 csv 的第一行,或者删除第一行的双引号,查询实际上会影响 10 行。

你知道为什么会这样吗?因为我宁愿不必编辑第一行。

标签: mysqlcsv

解决方案


问题在于您的Escaped By '"',当第一个 quote(") 遇到时,它被认为是Escape。只要摆脱它,它就会起作用。

LOAD DATA
LOCAL INFILE 'path\\to\\file.csv'
REPLACE INTO
TABLE `db`.`table`
COLUMNS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES
(
    `id`,
    `name`
);

推荐阅读