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

首先来看我们为什么要讨论这个问题~

首先这是一个正常的数据库查询,我们可以看到在ruizhi数据库里的chouka表内,所有数据如图。

现在,我们运行查询:

select * from chouka where "qq=915620310";

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

我们来看看结果:

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

为什么会出现这种情况呢?

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

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

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

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

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

我们为什么要探究这个问题呢?这是因为,在一些开发框架中,为了防止参数恶意注入,会对所有注入的参数“转化成字符串”,这时候,应该尤其注意这个规则,以避免出现全查/空集的情况。

【mysql】当where后接字符串,查询时会发生什么?的更多相关文章

  1. Mysql 中的日期时间字符串查询

    一.将数据库中的Date格式的数据,或者指定日期的字符串格式化为想要的样式 DATE_FORMAT (date, format)能根据格式串format 格式化日期或日期和时间值date,返回结果字符 ...

  2. 【mysql】MySQL以逗号隔开的字符串查询方式整理

    1 单个值查询使用函数进行处理,FIND_IN_SET()实用 SELECT * FROM `by_info` WHERE FIND_IN_SET(',type_id); 2 多个值模糊查询,使用正则 ...

  3. php查询mysql中的json编码后的字符串内容的方法

    问题 mysql里存的是json编码后的字符串,其中中文会被转为unicode码,所以直接查询是查询不到的. mysql里的查询如 like "%\u6211\u662f%" 也是 ...

  4. 【MySQL】过滤后的结果集较大,用LIMIT查询分页记录,查询效率不理想

    > 参考的优秀文章 优化LIMIT分页--<高性能MySQL>(电子工业出版社) > 场景描述 遇到一个场景:查询排序后的结果集较大,我们采用分页显示,每页显示20条记录,但是 ...

  5. mysql(4)—— 表连接查询与where后使用子查询的性能分析。

    子查询就是在一条查询语句中还有其它的查询语句,主查询得到的结果依赖于子查询的结果. 子查询的子语句可以在一条sql语句的FROM,JOIN,和WHERE后面,本文主要针对在WHERE后面使用子查询与表 ...

  6. MySQL 对分组后的同类数据进行拼接字符串

    MySQL 对分组后的同类数据进行拼接字符串 写后台方法时遇到个问题,需要将表内同一订单号的操作记录流水进行简单拼接输出,不想取出来再操作,找了个mysql的方法直接操作 //group_concat ...

  7. 数据库入门(mySQL):数据操作与查询

    增删改 单表查询 多表查询 一.增删改 1.插入数据记录(增) insert into table_name(field1,field2,field3,...fieldn) valuses(value ...

  8. MySql(六)单表查询

    十.单表查询 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制 ...

  9. mySQL 教程 第4章 数据查询

    mySQL运算符 这些运算符在SQL查询中用得到. 算数运算符 + 加 - 减 * 乘 / DIV 除 % MOD 取余数 比较运算符 = 等于 <> != 不等于 < <= ...

随机推荐

  1. soj2013.Pay Back

    2013. Pay Back Constraints Time Limit: 1 secs, Memory Limit: 256 MB Description "Never a borrow ...

  2. Session详解、ASP.NET核心知识(8)

    介绍一下Session 1.作用 Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session). 在本篇博文的姊妹篇 ...

  3. Groovy/Spock 测试导论

    Groovy/Spock 测试导论 原文 http://java.dzone.com/articles/intro-so-groovyspock-testing 翻译 hxfirefox 测试对于软件 ...

  4. jQuery 库的优缺点

    通用性良好,适合大多数常规网站,省去了为浏览器兼容性写封装函数的麻烦(1+版本支持IE6.7.8,2+版本支持包括IE9在内的现代浏览器). 通用性良好意味着特异性不好,所以jQuery并不适合特异性 ...

  5. perl6 HTTP::UserAgent发送post

    use HTTP::UserAgent; my $ua = HTTP::UserAgent.new; say 'All method:'; say $ua.^methods; my %data = : ...

  6. go 切片练习

    下列程序输出什么? package main import "fmt" func main() {     var sa = make([]string, 5, 10)     f ...

  7. swagger学习

    https://segmentfault.com/a/1190000010144742 https://segmentfault.com/a/1190000014775124 https://blog ...

  8. javascript多投事件的处理 (转)

    出处 http://blog.csdn.net/dead_of_winter/article/details/1646367 尽管ecma标准指定了addEventListener这样的方法来实现事件 ...

  9. video标签、audio标签

    1.video标签 <video src="nans.mp4" controls="controls"  autoplay="autoplay& ...

  10. 利用mysql的binlog恢复数据

    MySQL Binary Log也就是常说的bin-log, ,是mysql执行改动产生的二进制日志文件,其主要作用有两个: * 数据回复 * 主从数据库.用于slave端执行增删改,保持与maste ...