字段文本中包含“\n”或“\r”时的处理
示例
如果在导出的数据中某字段
(通常为字符串类型,
如varchar)
中包含
“\n”
或
“\r”
,
则只对“\n”进行转义。
如果在“\n”前加转义字符(默认为“\”),“\r”不变,仍为不可见字符“\r”
,
使用二进制方式查看为“0x0D”。
示例1:转义“\n”的原因是文本中的内容“\n”与默认的行分隔符(LINES
TERMINATED)相同,故将文本中的“\n”转义。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qw\ner'),(2,'as\rdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/n_1.txt';
Query OK, 2 rows affected
查看导出文件,cat 命令中的-b 参数表示对非空输出行进行编号:
$ cat -b n_1.txt
1
1
qw\
2
er
df
3
2
as
使用二进制方式查看导出文件:
$ hexdump -C n_1.txt
00000000
31 09 71 77 5c 0a 65 72
0a 32 09 61 73 0d 64 66
|1.qw\.er.2.as.df|
00000010
0a
|.|
GBase 8a MPP Cluster 产品手册
5 数据库管理指南
文档版本953(2022-04-10)
南大通用数据技术股份有限公司
1256
00000011
示例2:如果显示的指定行分隔符为其他字符,则不发生转义。
示例中所用的表及数据:
DROP TABLE IF EXISTS gs;
CREATE TABLE gs (a int DEFAULT NULL, b varchar(20) DEFAULT
NULL);
INSERT INTO gs values(1,'qw\ner'),(2,'as\rdf');
导出SQL 语句:
gbase> SELECT * FROM gs INTO OUTFILE '/home/gbase/temp/n_2.txt'
LINES TERMINATED BY ';';
查看导出文件,导出文件中的“^M”表示“\n”:
$ vi n_2.txt
1
qw
er;2
as^Mdf;
使用二进制方式查看导出文件:
$ hexdump -C n_2.txt
00000000
31 09 71 77 0a 65 72 3b
32 09 61 73 0d 64 66 3b
|1.qw.er;2.as.df;|
00000010