mysql 数据库id类型Bigint 作为条件查询,数据失真问题。

今天遇到一个奇葩的bug,先贴bug图。

异常描述:nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2,

报错显示我的selectById 查到了两个,说明有重复数据,我就拿id 去数据库里对比了一下

查询条件的id:1853683755149516801

数据库里可以看到,801的数据只有一条,但是有一条特别接近的800

带着sql去查下数据库,还真的查出来两条,但是仔细对比发现,两个数据非常接近,但是确实不是一样的。

我就想是不是bigint类型的问题,我换成string试试。

神医!立马就好了,问题果然就是bigint,一整个无语住了。

之前看都在说bigint的查询速度和存储空间占用都优于varchar,没想到出了这个bug。

解决办法也很简单,把这个id用string.valueOf()转一下就行。

本人用id字段大部分还是varchar比较多,有时候用uuid 生成主键插入的时候很方便,第一次用bigint就出现这种情况。