【问题澄清】
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
’ (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 中结果:
【解决办法】
- 去掉了 set 部分
- 将对应字段
@shop_level
改为shop_level
【问题原因】
- 测试 4/3.0.0 有同样的问题,下面 pr 解释当前 tidb 对 set 支持还是不完全的,pr 可以关注下。
- https://github.com/pingcap/tidb/issues/16617