对于mysql,我找到了以下用于导入csv文件的查询:
LOAD DATA LOCAL INFILE '/example.csv'
INTO TABLE exampletable
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
ESCAPED BY '\\'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES
(example_field_name,example_field_city,example_field_state);
我才刚刚开始学习,所以请原谅这个琐碎的问题,但我想知道是否有人能用比mysql帮助文档中更简单的方式来解释以下部分:
这是什么意思?
OPTIONALLY ENCLOSED BY '"'
这是什么意思?
ESCAPED BY '\\'
下面的\r和\n是什么意思?
LINES TERMINATED BY '\r\n'
谢谢你的帮助。
3条答案
按热度按时间k4emjkb11#
每个人都认为csv文件格式很简单,它不是。。。。你可以在维基百科上看到它的历史
可选择用“'”括起来
有些列包含分隔符。要将以下行作为5列加载,
由'\'转义
如果您的数据包含引号字符呢?
以'\r\n'结尾的行
windows文件格式。行尾有两个空格字符“回车”(\r)和“行尾”(\n)。
有没有注意到windows记事本不能正确打开unix文件?这是因为这样的文件只以eol字符结束行。所有这些都可以追溯到打字机时代的计算和操作系统之间不兼容的文本标准。
suzh9iv82#
csv表示由字符分隔的字符串。在你的情况下,一条线可能是这样的
这表示值为的三个字段
foo
,bar
,和baz
. 现在的问题是,如果其中一个字段包含逗号怎么办?如果您不特别标记,它将被视为字段分隔符。此标记使用转义字符完成。在你的例子中只有一个反斜杠。这样我们就可以有可以理解为
foo\, blarb
,bar
,和baz
. 现在,您可以选择用引号将字段括起来,但仍然需要对作为字段值一部分的引号进行转义。最后,如何创建明确的数据表示一直是个问题。对于您的线路终止问题:
\r
是回车的ascii字符(字节13)的常用表示形式。\n
是换行符(ascii 10)。这两个字符用于表示windows和某些协议(如http)上的行尾。仅在unix/linux上\n
通常使用。顺便说一句\n
以及\r
表示法也使用转义符。一般来说,如果在序列化文本的某些字符之前看到反斜杠,通常是某种转义机制。反斜杠是一个非常流行的字符,因为它是相当罕见的正常文本。
g2ieeal73#
这说明值可以,但不必在值的开头和结尾包含双引号
"john doe"
```ESCAPED BY '\'
这标识了如何终止行或记录,以告诉mysql开始下一个记录
"last data for this line or record" \r\n
. \r\n=文本文件中的换行符