MySql中数据类型隐式转换

        几天前,一同事发我一Sql:SELECT 1 FROM dual WHERE '103,105,102' IN (103,100)。然后问我有木有执行结果,我下意识说木有,结果自然打脸了,得出结果是1。当时虽然觉得神奇,也没怎么放心上,今天突然想起这事儿来,又去试了试:

    

select '1,2,3' in (1), '1,2,3' in (2), '1,2,3' in (3) from dual

居然发现得出结果:

MySql中数据类型隐式转换_第1张图片

这绝对不是巧合,这是Mysql的隐式转换搞的鬼 :

MySql中数据类型隐式转换_第2张图片

看吧!于是,将这问题记录下,谨防踩坑!

结论:

隐式类型转换:

        两个值进行运算或者比较,首先要求数据类型必须一致。如果发现两个数据类型不一致时就会发生隐式类型转换。例如,把字符串转成数字,或者相反:

SELECT 1+'1'; #字符串1转成数字,得出2
SELECT concat(2,'test'); # 数字2转成字符串,得出2test
select '1, 2, 3' in (1, 2, 3); # 这玩意会把字符串转数字1,所以也会有结果的,结果是1

你可能感兴趣的:(MySql,mysql,java,数据库)