mysql数据库5.1.48的bug

本文深入探讨了在MySQL 5.1.48中,int与bigint类型在进行值比较时的不同行为,通过具体示例展示了两者在查询条件处理上的差异,并解释了背后的原因。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日在同事发现一个mysql关于int和bigint进行值比较问题,和大家分享下:
我们在mysql(5.1.48)中建立一张表,表名为intbig,包含三个字段id(int),num(int),num2(bigint),初始化4行数据,每行数据的值分别是:
<image001.jpg>
现在,我们分别执行如下SQL语句:

1. SELECT * FROM intbig WHERE num >= 2.1
<image002.jpg>
2. SELECT * FROM intbig WHERE num2 >= 2.1
<image003.jpg>
3. SELECT * FROM intbig WHERE num2 >= 2.5
<image002.jpg>

我们可以看到,使用int类型,符合正常思维逻辑,只查出了3,4的记录
但是使用bigint,对查询条件进行了四舍五入,2.1和2.5分别返回了不同的结果。

咨询了DBA,我们发现在mysql进行值比较的时候
int:使用decimal类型比较(支持浮点数的比较)
Arg_comparator::compare_decimal
Arg_comparator::compare_decimal (this=0x121cc2b8) at item_cmpfunc.cc:1378
1378 int Arg_comparator::compare_decimal()

bigint:使用int类型比较
Arg_comparator::compare_int_signed
Arg_comparator::compare_int_signed (this=0x121cc2b8) at item_cmpfunc.cc:1457
1457 int Arg_comparator::compare_int_signed()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值