mysql 的load data infile

2019-01-03 14:46:31于丽


如果字段以ENCLOSED 字符开始,只要后面紧跟着字段或行TERMINATED BY 序列 ,这个字符实例就被认为用来终止一个字段值。为了明确,如果在字段中要使用ENCLOSED BY 字符,可以重复写两遍该字符,那么它们会被解释成单个ENCLOSED BY字符处理。例如,如果指定ENCLOSED BY '"',引号将做如下处理:
"The ""BIG"" boss" -> The "BIG" boss
The "BIG" boss -> The "BIG" boss
The ""BIG"" boss -> The ""BIG"" boss

FIELDS ESCAPED BY 控制如何写入或读出特殊字符。如果FIELDS ESCAPED BY 字符不是空的,它将被用于做为下列输出字符的前缀:

• FIELDS ESCAPED BY 字符
• FIELDS [OPTIONALLY] ENCLOSED BY 字符 。
• FIELDS TERMINATED BY 和LINES TERMINATED BY 值的第一个字符。
• ASCII 0 (实际上在转义字符后写上ASCII '0',而不是一个零值字节)。
如果FIELDS ESCAPED BY 字符为空,那么将没有字符被转义并且NULL 值仍输出为NULL,而不是N。指定一个空的转义字符可能不是一个好的方法,特别是用户的数据字段值中包含刚才列表中的任何字符时。
对于输入值,如果FIELDS ESCAPED BY 字符不是空字符,则出现这种字符时会被剥离,然后以下字符被作为字段值的一部分。例外情况是,被转义的‘0'或‘N'(例如, 或N,此时转义符为‘')。这些序列被理解为ASCII NUL(一个零值字节)和NULL。用于NULL 处理的规则在本节的后部进行说明。
关于更多的 “” 转义语法信息,查看文字值 。
在某些情况下,字段与行处理相互作用:
• 如果LINES TERMINATED BY 是一个空字符串,FIELDS TERMINATED BY 是非空的,则各行以FIELDS TERMINATED BY作为结尾。
• 如果FIELDS TERMINATED BY 和FIELDS ENCLOSED BY 值都是空的(''),那么一个固定行(无定界符) 格式将被使用。用固定行格式时,在字段之间不使用分隔符(但是用户仍然有一个行终结符)。列值的写入和读取使用列的“显示”宽度。例如,如果一个列被定义 为INT(7),列的值将使用7 个字符的字段被写入。对于输入,列值通过读取7 个字符来获得。
LINES TERMINATED BY 仍然用于分离行。如果一行没有包含所有的字段,那么列的剩余部分被设置为它们的默认值。如果用户没有一个行终结符,用户应该设置它为''。在这种情况下,文本文件必须包含每行的所有的字段。
固定行格式也影响对NULL 值的处理;见下面。注意,如果用户正在使用一个多字节的字符集,固定长度格式将不能工作。
NULL 值的处理有很多,取决于用户所使用的FIELDS 和LINES 选项:
• 对于缺省的FIELDS 和LINES 值,输出时,NULL 被写成N,当读入时,N 被作为NULL 读入(假设ESCAPED BY 字符为 “”)。
• 如果FIELDS ENCLOSED BY 不是空值,则包含以文字词语NULL 为值的字段被作为NULL 值读取。这与被FIELDS ENCLOSED BY 字符包围的词语NULL不同。该词语被作为字符串'NULL'读取。