通过sql查询不到数据,貌似是一个数据库层面的bug

上面的哥哥们,我这里统一说明下,我是同一套代码添加数据的数据,然后今天有人反应数据查不出来,我才发现的,没有其他默认筛选,你们可以远程我的电脑测试一下的

select expire_date ,length(expire_date ) from table where expire_date =‘2024-08-15’ or id = “2024-08-03那条数据的id”
这个SQL看看

直接用mysql客户端查询,正常吗?是不是客户端工具兼容性问题啊!

我也怀疑过,但是一直以来都这么用的没问题。而且我新建哥测试表和数据查询没问题

:thinking:这样查呢,expire_date >= ‘2024-08-03’ and expire_date < ‘2024-08-04’

可以查出来,我也是通过这个系统业务需求发现,就是查询expire_date <= '2024-08-03’查询是查询不出expire_date = 2024-08-03 这条数据的,但是用expire_date <= '2024-08-04’就可以查询出来

这样呢?LEFT(expire_date,10) = ‘2024-08-03’

可以查出来

:joy:这个date类型里不会还存了时分秒吧。右键生成sql,看看生成出来的是啥,然后再插回去,看看能不能查询出来

image

我是date类型,代码里也是date类型,没有时分秒,怎么看有没有时分秒

验证的方法就是上面说的,数据生成insert,然后再插入回去,看看能不能查询出来

我直接把2024-08-03改成2024-08-04号保存再又改成2024-08-03保存就能查询到了,
所以数据有什么问题,这个数据完全看不出来有什么问题,还有这个数据为什么会有问题的

1 个赞

去命令行里查询看看数据呢?

可能DBeaver也有些问题

字段类型是否被修改过? 可以用date函数试试? select * from xxx where date(expire_date) = ‘2024-08-03’;
也可以用date 判断数据有没有时分秒?
select * from xxx where date(expire_date) = expire_date;

那这个怎么弄,重建索引或者表看看?

现在还可以复现吗? 数据索引一致性检查过了吗? 可以发下查得出来的和查不出来的 explain analyze 结果的文本吗

explain下,应该就能大概看到转换的结果了

可以测试下hex(字段名) 查下有问题的和没有问题的同个字段,二进制存储的内容