近日在同事发现一个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
2. SELECT * FROM intbig WHERE num2 >= 2.1
3. SELECT * FROM intbig WHERE num2 >= 2.5
我们可以看到,使用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()
--转自