最近在工作中发现一个有趣的现象,向sql中一个varchar类型的查询条件,传递一个int类型的数值0,查询出来的结果和想象中的不太一样。结果中不仅有数值为0的,还有其他字符串的数据。
在网上查询了资料发现,造成这个问题的原因有以下两点:
1,mysql会自动的将查询条件左边的值类型转换为右边的类型。
2,varchar类型的数据进行转换的时候,不同的字符串转换不同
如果是数字如'001245',会转换为25.
select CAST('001245' AS signed INTEGER) demo from dual;
而是'S210'这种类型的会转换成0.所以查询出来的结果和预期的差距比较大
select CAST('S210' AS signed INTEGER) demo from dual;
快乐编程
知识使我快乐