修改列定义为字符串默认为空,导致查询失败

版本是TiDB-v4.0.0-rc.1

image

请问修改前是什么属性?

修改前就是正常的默认设置

image

能否麻烦发送表结构,几条测试记录,查询sql 文本,我再本地复现下。

刚才自己测试,不知道是不是不准确,没有遇到报错,多谢。

这个测试用例我试了下,也没问题,但是我线上的表,就不行

f_mid_order_details.txt (1.1 MB)

我这边没有复现,请其他同事帮忙查看,会尽快反馈,多谢

好像只有真实的 tikv 才会复现,default 填充在 tikv 端 @rongyilong-PingCAP

@peng-xin 你好,我是 TiDB 的研发同学,我用你这份数据在本地也没有复现。

你线上执行报错时,能否把对应错误日志上传一下,里面有栈信息,可以帮助我们直接定位到抛错的位置。

不好意思,笔记本儿坏了,刚看到回复。

你好,可以提供一下有问题的表的 explain 结果吗,因为我本地执行之后这一列是可以为 NULL 的,但是我看上面的截图里,explain的结果似乎是 NO

对,现在是no。本来是not null,但是修改为not null已经成功了,查询的时候会报错

image

也就是这列原本是not null的, 然后修改成了null,还写入了数据 但是查询出错了是吗。

不是,原本是null,后来改成了not null.

可以先用alter table 把这一列改成null看看能否让查询成功。

改为null是没问题的

  1. 意思是能否尝试重新执行一遍这个修改操作,先修改为原值,再修改为not null ,看看问题能否解决。或者说错误依然能够复现。
  2. 当前请考虑业务是否满足,是否会有什么影响。

1.重试之后,情况没有发生改变。

2.数据在插入时,并非全量字段,没有写入的字段在进行not in查询时,并不会被查询出来,所以需要将这部分字段改为默认空字符串。

可以先alter table null default ‘’ 然后再看一下这个查询结果:select count(1) from f_mid_order_details_tmp_tmp where relations_order_tag is null

这样可以,not null为什么不行呢?

select count(1) from f_mid_order_details_tmp_tmp where relations_order_tag is null 的结果大于0吗

有点怀疑是表里这列有 null 数据,但是alter table因为某些原因执行成功了,但是查询时检查未通过