MySQL中隐式转换导致的查询结果错误案例分析
某一天,开发问我,为什么针对一个查询会有两条记录,且其中一条记录并不符合条件
select * from tablea where xxno = 170325171202362928;
xxno
为 170325171202362928
和 170325171202362930
的都出现在结果中。
一个等值查询为什么会有另外一个不同值的记录查询出来呢?我们一起来看看究竟
二、分析
我们查看该表结构,发现xxno
为varchar
类型,但是等号右边是一个数值类型,这种情况下MySQL会如何进行处理呢?
官方文档如下:https://dev.mysql.com/doc/refman/5.6/en/type-conversion.html
The following rules describe how conversion occurs for comparison operations: .... 省略一万字 ....
In all other cases, the arguments are compared as floating-point (real) numbers.