前几天在写sql的时候遇到一个问题,查出来的数据跟理想的完全不一致。这里记录一下
我要查询type类型为0的数据,- 的数据也出来了。具体的数据库的信息如下。
首先想到的是,数据类型的问题,sql语句里面写的 type=0, 这里是int 类型,再看一下数据库字段类型。
果然,type是varchar类型,与sql里面的不一致。 mysql会对数据类型自动进行转换,这也是为什么sql写的int类型,却可以到数据的原因。但是为什么 - 的数据也出来了呢?
是不是mysql在类型转化的时候,将非数字字符转换成了0呢?
果然,进行转化的时候,非数字类型字符串被转换成了0,数字开头的字符串仅保留了数字。
还可以得到另外一个结论,mysql 在对数据进行隐式转化的时候,是将表内数据进行转换,而不是对查询sql中的字段进行转换,可中转换肯定耗费性能,也会导致索引失效!索引失效的问题
mysql 的容错还体现在别的地方,比如
select 1/0 并不会报错,
这种机制究竟是好是坏还需在具体场景中得出结论,总之,代码严谨一定是好的。