Mysql 明明只有一条数据却查询出来多条

之前开发的时候也遇见过这个问题,查询结果与实际不符,数据库明明只有一条符合条件的数据却显示了多条
例如:
表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

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值