之前开发的时候也遇见过这个问题,查询结果与实际不符,数据库明明只有一条符合条件的数据却显示了多条
例如:
表t1
Create Table: CREATE TABLE `t1` (
`id` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
数据如下:
+--------------------+
| id |
+--------------------+
| 204027026112927605 |
| 204027026112927603 |
| 2040270261129276 |
| 2040270261129275 |
| 100 |
| 101 |
+--------------------+
查询ID为204027026112927603:
select * from t1 where id=204027026112927603;
查询结果却这样显示:
+--------------------+
| id |
+--------------------+
| 204027026112927605 |
| 204027026112927603 |
+--------------------+
2 rows in set (0.00 sec)
????what个情况,瞬间怀疑人生
将sql改为 : select * from t1 where id='204027026112927603';
+--------------------+
| id |
+--------------------+
| 204027026112927603 |
+--------------------+
1 rows in set (0.00 sec)
结果就正常了。。。为啥会这样呢?
答案是 发生了隐式类型转换!
经过测试,当数字超过16位以后,转成double类型就已经不准确了,例如20402702611292711会表示成20402702611292712
详细可参考: https://mp.weixin.qq.com/s/3C7yNtrY7hNRnslPVeA27g