程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql的比較運算

mysql的比較運算

編輯:MySQL綜合教程

5up3rh3iblog

在menzhi007的blog裡看到非常有意思的東西:

html">http://www.BkJia.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牛的指點:)

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved