首頁 > 資料庫 > mysql教程 > mysql的比较运算_MySQL

mysql的比较运算_MySQL

WBOY
發布: 2016-06-01 13:47:49
原創
919 人瀏覽過

bitsCN.com

5up3rh3iblog

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

http:///database/201003/45293.html

在mysql手册里:

phpchina.com/manual/mysql/functions.html#comparison-operators">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牛的指点:)

bitsCN.com
相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板