首页 > 技术文章 > 记Mysql类型引起的BUG

javalinux 2021-09-16 17:39 原文

今天在项目里发现了个好玩的BUG,来记录下。

首先:表数据是这样的(项目里的表就不展示了,随意弄个临时表)

 

 

 

由于a的默认值为空,同事就写了这样的sql

select * from t1 where a =0

和这样的sql

select * from t1 where a>0

--------------------------------------------------

于是问题就出现了:

第一个sql结果如下:

 

 

 

没错,出来了2条记录,接下来看另一个sql结果

 

 

 

反而只出来一条结果。。。。

至于原因嘛,很明显是a类型引起的,

由于a是字符串,where a=0 的成立条件就成了a 的值是'0',或者是非数字开头的字符串

where a >0 出来的数据的原因在于 字符串a最左边的数字是6

具体字符串做比较的规则可以参考https://dev.mysql.com/doc/refman/5.7/en/type-conversion.html

解决办法:把0改为'0'

所以数据库的字段类型务必查看仔细,避免发生隐式类型转换不走索引和造BUG


————————————————
版权声明:本文为CSDN博主「牙疼疼疼疼疼」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/New_CJ/article/details/105869966

推荐阅读