对于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'
感谢您的帮助。
答案 0 :(得分:7)
每个人都认为CSV文件格式很简单,不是....你可以在wikipedia
上阅读它的历史记录有些列包含分隔字符。您希望将以下行加载为5列
one, two, "three, tres, trois", four, five
如果您的数据包含引号字符怎么办?
one, two, "In France, one would say \"trois\"", four, five
Windows文件格式。行以两个空格字符“carriage return”(\ r)和“End of line”(\ n)结束。
有没有注意到Windows记事本无法正常打开unix文件?那是因为这样的文件终止只有EOL字符的行。所有这些都可以追溯到计算机类型编写者和操作系统之间不兼容的文本标准。
答案 1 :(得分:0)
OPTIONALLY ENCLOSED BY '"'
这表明值可以,但不必在值"john doe"
的开头和结尾包含双引号
ESCAPED BY '\\'
某些字符在CSV文件中不安全,并且这些字符使用双反斜杠进行转义Denver\\, CO
LINES TERMINATED BY '\r\n'
这标识了行或记录如何终止以告诉mysql启动下一条记录"last data for this line or record" \r\n
。 \ r \ n =文本文件中的换行符
答案 2 :(得分:0)
CSV表示由字符分隔的字符串。在您的情况下,一行可能看起来像这样
foo,bar,baz
这代表三个字段,其值为foo
,bar
和baz
。现在问题是,如果其中一个字段包含逗号会发生什么?如果您没有特别标记,则将其视为字段分隔符。此标记使用转义字符完成。在你的情况下,一个反斜杠。所以我们可以有像
foo\, blarb,bar,baz
将被视为foo\, blarb
,bar
和baz
。现在,您可以选择用引号括起您的字段,但您仍然需要转义引号,这将是您的字段值的一部分。最后,如何创建一个 unambigious 的数据表示始终是一个问题。
对于您的行终止问题:\r
是回车符(字节13)的ASCII字符的常见表示。 \n
是换行符(ASCII 10)。这两个字符用于表示Windows上某行的结尾以及某些协议(如HTTP)。在Unix / Linux上,通常只使用\n
。顺便说一下,\n
和\r
表示法也使用了转义符。
作为一般说明,如果在序列化文本中的某些字符之前看到反斜杠,它通常是某种转义机制。反斜杠是一个非常受欢迎的角色,因为它在普通文本中相当罕见。