今天在项目里发现了个好玩的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