Mysql关于0值判断的坑 最近遇到一个Mysql返回多值的问题,最后发现是mysql过滤条件中0值判断的问题。 简练问题如下 有个INT字段a,默认值为0,程序传入的判断条件是 a = abacd。 传入的是一
Mysql关于0值判断的坑最近遇到一个Mysql返回多值的问题,最后发现是mysql过滤条件中0值判断的问题。 简练问题如下有个INT字段a,默认值为0,程序传入的判断条件是 a = 'abacd'。 传入的是一个字符串,结果a=0的所有数据都返回了。 原因mysql会在逻辑判断时,如果是整型判断,但是传入的是字符串,如果字符串不是数字,则字符串会被转换为0。所以, 这段代码实际判断的条件是 a = 0。 解决方式mysql中的逻辑判断,判断值的传入,应该与字段类型一致,整型判断整型,字符串判断字符串。如果避免不了,跨类型的判断,那么就需要根据业务逻辑,进行调整,避免掉入这个坑。 问题引申如果字段a是否varchar类型,值为0,那么判断时应该用 a='0'判断,而不是 a = 0 判断,原因与上面的原因一致,字符串会被转换为0,结果最终判断的是 0 = 0。 Mysql判断数值0误区总结mysql中判断数据表字段是否为0,当前数据表字段为int类型时,没有问题。若为char或者varchar类型时,则需要使用'0',显而易见,字符串和整型是不能等同的。所以不要 犯这么低级的错误。 以下是从网上搜索到的mysql搜索的原理: mysql会把字段的值先转成整数,然后再对比。 如果字段的第一位是字符串,那么转成整数就是0了, 一般对字符串的搜索都要加上引号。 |
2021-06-02
2021-06-05
2022-06-27
2022-10-12
2019-09-11