【发布时间】:2021-12-06 02:16:33
【问题描述】:
声明如下:
LOAD DATA INFILE '/var/lib/mysql-files/test.csv'
INTO TABLE test
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
这里有一行可以很好地导入:
1450327840667357185, 1, "This is my text"
如果文本字段有逗号,则会失败。例如,看到这一行:
1450327840667357185, 1, "This is my text, with a comma in it"
为什么会失败?
如果我转义逗号(通过在它前面放一个反斜杠)它可以正常工作。但这没有意义。我已经规定字段可以用双引号括起来,为什么不接受其中的所有内容作为字段的内容呢?
如果我必须重新处理所有文本以引用逗号,那将是一项艰巨的任务。
【问题讨论】:
-
您已指定
FIELDS TERMINATED BY ','- 为什么您会感到惊讶? -
您的 CSV 在
,分隔符后有空格。我没有 MySQL 可以玩,但我希望这意味着它将这些空间视为值的一部分,从而导致各种问题。试试TERMINATED BY ', '? -
这就是问题所在。我在文本字段值中的逗号后面也看到了一个空格...这个空格在实际数据中不存在吗?
-
@Akina - 通过将
', '指定为分隔符/终止符(包括空格),第三个值现在被读取为以"开头,而不是从一个空格开始。这意味着ENCLOSED BY '"'现在按预期“工作”;解析正确地看到 quoted string 内的,,因此不作为分隔符处理。相反,正如问题中所写,第三个值以空格开头,而不是",因此不是带引号的字符串,导致解析器认为有四个分隔值。 -
@MatBailie 请将此解释添加到您的答案中 - 这很关键。