[FAQ] tidb v4.0.0 - load data ... set, tidb 与 mysql 中表现不一致

【问题澄清】

1、创建一个表 CREATE TABLE shop_info(shop_id VARCHAR(50),shop_name VARCHAR(50),create_time DATETIME,shop_no INT,shop_level VARCHAR(50));

2、准备一个data文本文件,按表字段顺序填充了数据。其中shop_level列有部分数据为null,在文本中是一个空串。文件路径为 F:/data/member_info_partition/shop.dat

shop001 北京店 2019-08-05 04:08:18 1 s1

shop002 沈阳店 2019-08-05 14:08:59 2 a1

shop003 绍兴店 2019-08-05 14:08:50 3

shop004 新乡店 2019-08-07 11:08:19 4

shop005 济宁店 2019-08-05 14:08:06 5

3、使用load data语法导入上面的文本数据

LOAD DATA LOCAL INFILE ‘F:/data/member_info_partition/shop.dat’ INTO TABLE shop_info FIELDS TERMINATED BY ‘\t’ LINES TERMINATED BY ‘\r\n’ (shop_id,shop_name,create_time,shop_no,@shop_level) SET shop_level=NULLIF(@shop_level,’’)

4、预期结果

数据全部正确插入表中,并且 shop_level 列无数据部分存储为 null。

5、实际测试结果

在mysql上得到预期结果; 但是在 tidb 上,感觉 set 语句出现了问题,导致 shop_level 列全部存储为 null,丢失了数据。

tidb 中结果:

mysqlmysql 中结果:

【解决办法】

  1. 去掉了 set 部分
  2. 将对应字段 @shop_level 改为 shop_level

【问题原因】