【mysql】当where后接字符串,查询时会发生什么?

很久没有研究一个“深层次”的问题了。mysql

首先来看咱们为何要讨论这个问题~sql

首先这是一个正常的数据库查询,咱们能够看到在ruizhi数据库里的chouka表内,全部数据如图。数据库

如今,咱们运行查询:框架

select * from chouka where "qq=915620310";ui

select * from chouka where "1qq=915620310";spa

咱们来看看结果:3d

能够看到,第一句结果为空,第二句结果为全查。两句的差异在于,第二句的“”内,在第一句“”内的内容前加了一个1.blog

为何会出现这种状况呢?开发

mysql在把字符串强转成数字有三种方式:字符串

方法一:SELECT CAST('123' AS SIGNED);
方法二:SELECT CONVERT('123',SIGNED);
方法三:SELECT '123'+0;

where后的条件,最终是以数字的形式进行比较,换言之where后的条件,最终生成的结果都是数字,因此要发生字符串向数字的转换,转换规则如上。

换句话说,若是字符串没法直接转换成数字,则字符串会进行前置数字正则匹配,成为最终的结果。咱们来看看演示:

 

好了,如今你应该明白若是where后跟的是字符串,那么断定条件究竟会发生如何的变化。

咱们为何要探究这个问题呢?这是由于,在一些开发框架中,为了防止参数恶意注入,会对全部注入的参数“转化成字符串”,这时候,应该尤为注意这个规则,以免出现全查/空集的状况。