数据库

 首页 > 数据库 > MySql > mysql的比较运算

mysql的比较运算

分享到:
【字体:
导读:
         摘要:5up3rh3iblog在menzhi007的blog里看到非常有意思的东西:http://www.2cto.com/201003/45293.html在mysql手册里:http://www.phpchina.com/manual/mysql/functions.html#comparison-operatorsMy...

mysql的比较运算

5up3rh3iblog

在menzhi007的blog里看到非常有意思的东西:

html">http://www.2cto.com/database/201003/45293.html

在mysql手册里:

http://www.phpchina.com/manual/mysql/functions.html#comparison-operators

MySQL按照以下规则进行数值比较:

  • 若有一个或两个参数 NULL,除非NULL-safe <=> 等算符,则比较运算的结果为NULL
  • 若同一个比较运算中的两个参数都是字符串,则按照字符串进行比较。
  • 若两个参数均为整数,则按照整数进行比较。
  • 十六进制值在不需要作为数字进行比较时,则按照二进制字符串进行处理。
  • 假如参数中的一个为 TIMESTAMP DATETIME 列,而其它参数均为常数, 则在进行比较前将常数转为 timestamp。这样做的目的是为了使ODBC的进行更加顺利。 注意,这不适合IN()中的参数!为了更加可靠,在进行对比时通常使用完整的 datetime/date/time字符串。
  • 在其它情况下,参数作为浮点数进行比较。  

在默认状态下,字符串比较不区分大小写,并使用现有字符集(默认为cp1252 Latin1,同时对英语也适合)

为了进行比较,可使用CAST()函数将某个值转为另外一种类型。 使用CONVERT()将字符串值转为不同的字符集。请参见12.8节,“Cast函数和操作符”

以下例子说明了比较运算中将字符串转为数字的过程:

mysql> SELECT 1 > 6x;

        -> 0

mysql> SELECT 7 > 6x;

        -> 1

mysql> SELECT 0 > x6;

        -> 0

mysql> SELECT 0 = x6;

        -> 1

这个如果不注意好确实可以导致安全问题的,比如menzhi007里举的那个列子,如果字符变量查询没有引号,但是用某些函数过滤了不可以直接注射,那么可以直接提交0就可以绕过了...

最后感谢menzhi007及hi群的各大牛的讨论,尤其是ryat牛的指点:)

mysql的比较运算
分享到:
mysql中的0引发的安全风险
mysql中的0引发的安全风险 menzhi007 mysql的比较运算,黑哥解释的很清楚,感谢下 http://www.2cto.com/database/201003/45294.html 当mysql中执行where条件时 0可以作为通配符,来查询索引出数据。 mysql> select username from users where username=0 limit 1;+----------+| username |+----------+| admin    |+----...
mysql 的万能密码?
mysql 的万能密码? menzhi007   有次写用户登录模块,忘记使用empty()判断是否为空。结果使用ajax异部数据的时候,直接就登录成功了,纳闷了少许。结果做了个小测试,还真能查出来数据。当where条件为0,居然能读出数据。我的mysql 版本为+-------------------+| version()         |+-------------------+| 5....
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……