在mysql使用过程中,我往往使用“load data infile”和“select into outfile”这两种功能来快速“搬运”数据。细心的童鞋会发现这两种SQL语句都有:
line terminated by 'string'
fields terminated by 'string'
enclosed by 'char'
escaped by 'char'
一,在“load data infile”中:
先看看enclosed-by的作用:
1,在字段值中存在"enclosed by"字符,并且其前一个字符为"escaped by"字符,则导入mysql后,"escaped by"字符会被去除。
2,对于文本中被"enclosed by"包裹的字段值,如果值内出现连续两个的"enclosed by"字符,则导入后,会变成一个。
再看看escaped-by作用:
1,字段值内出现"escaped by"字符,该字符将被去除,同时保留其后一个字符;
2,但是对以下特殊的两个“挨着”字符会进行"反转义"处理
"\\0" -- 反转义成\0(0x00)
"\\b", "\\n", "\\r", "\\t" -- 反转义成\b, \n, \r, \t
"\\Z" -- 反转义成ascii码26
"\\N" -- 反转义成NULL
二,在“select into outfile”中:
还是先看看enclosed-by的作用:
1,enclosed-by字句的optionally是有作用的
有optionally,则只对字符串类型的字段使用encloed-by字符“包裹”;
无optionally,则对全部字段使用enclosed-by字符“包裹”。
最后看看escaped-by的作用:
1,对以下4中情况的字符进行转义
字段值中有"escaped by"字符
字段值中有"enclosed by"字符
字段值中有"fields terminated by"和"lines terminated by"字符串的首个字符
ascii码0 -> 转义之后变成两个字节
第一个字节 - '\\'
第二个字节 - '0'(字符0,而不是ascii 0)