zoukankan      html  css  js  c++  java
  • 记Mysql类型引起的BUG

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

  • 相关阅读:
    poj3277 City Horizon
    60.左值右值以及类型判断
    59.C++与正则表达式
    57.C++处理转义字符
    56.lambda表达式与绑定以及伪函数和绑定
    55.函数模板指针匹配(模板自动匹配*多的)
    54.函数模板默认参数
    53.伪函数与函数绑定器
    52.模板的重载
    51.模板与引用
  • 原文地址:https://www.cnblogs.com/javalinux/p/15294502.html
Copyright © 2011-2022 走看看