2023-09-27 mysql-代号m-load加载数据出错-记录与分析

摘要:

2023-09-27 mysql-代号m-load加载数据出错-记录与分析

相关文档:

https://stoneatom.yuque.com/staff-ft8n1u/lsztbl/ww00x6o4hf785905#AqyB

bug记录:

load data中,不支持使用包裹符"ENCLOSED BY",否则导致实例crash.

https://devops.aliyun.com/projex/project/36ed2d8a9a29e7f8407c6f5498/bug/96ca89b98c548c9728fea6b26d

load data会将分隔符内的所有数据导入,不考虑特殊符号的作用。

https://devops.aliyun.com/projex/project/36ed2d8a9a29e7f8407c6f5498/bug/0c1db90713317e18394e380aaa

load data中,不支持使用转义字符"ESCAPED BY",否则导致实例crash.

https://devops.aliyun.com/projex/project/36ed2d8a9a29e7f8407c6f5498/bug/c3eb499a4e67f610ee7c2f18e2

mdb的load文档:

Loading from CSV files | MonetDB Docs

包裹符"ENCLOSED BY"

ENCLOSED BY含义:

在这个语句中,ENCLOSED BY参数的具体作用是这样的:如果我们没有指定这个参数,那么MySQL在读入数据文件时,默认的字符串边界符是单引号(')和双引号(")。如果数据文件中某个字段中包含了一个单引号或者双引号,而我们没有指定ENCLOSED BY参数,那么程序运行时就会将这个引号视作分隔符,导致读入数据的错误。如果我们指定了ENCLOSED BY参数,那么MySQL将会将这个字符串边界符视作文本的一部分,而不会将其作为分隔符进行数据的读入操作。

数据文件:

t1.csv

"1"|"彭"|"莉"|"1"|"87"|"1"
"2"|"陈"|"黎益"|"1"|"70"|"2"
"3"|"江"|"黎益"|"0"|"72"|"3"
"4"|"侯"|"黎益"|"0"|"77"|"4"
"5"|"孙"|"景名"|"1"|"83"|"5"
"6"|"高"|"民"|"1"|"70"|"6"
"7"|"林"|"敏丙"|"1"|"88"|"7"
"8"|"侯"|"十骏"|"1"|"87"|"8"
"9"|"林"|"闵静"|"0"|"67"|"9"
"10"|"高"|"三民"|"1"|"57"|"10"

表结构:

CREATE TABLE `xxx` (
  `id` int NOT NULL,
  `first_name` varchar(10) NOT NULL,
  `last_name` varchar(10) NOT NULL,
  `sex` varchar(5) NOT NULL,
  `score` int NOT NULL,
  `copy_id` int NOT NULL,
  PRIMARY KEY (`id`)
);

导入数据sql:

 load data infile '/tmp/t1.csv' into table xxx FIELDS TERMINATED BY '|' ENCLOSED BY '"';

mdb加载数据的sql:

COPY INTO xxx FROM '/tmp/t1.csv' ON CLIENT USING DELIMITERS '|', E'\n', '"';

你可能感兴趣的:(mysql-代号m,mysql,数据库,load)