這篇文章將為大家詳細(xì)講解有關(guān)MySQL如何實(shí)現(xiàn)比較運(yùn)算,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。
網(wǎng)站建設(shè)哪家好,找成都創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了融安免費(fèi)建站歡迎大家使用!
MySQL按照以下規(guī)則進(jìn)行數(shù)值比較:
若有一個(gè)或兩個(gè)參數(shù)為 NULL,除非NULL-safe <=> 等算符,則比較運(yùn)算的結(jié)果為NULL。
若同一個(gè)比較運(yùn)算中的兩個(gè)參數(shù)都是字符串,則按照字符串進(jìn)行比較。
若兩個(gè)參數(shù)均為整數(shù),則按照整數(shù)進(jìn)行比較。
十六進(jìn)制值在不需要作為數(shù)字進(jìn)行比較時(shí),則按照二進(jìn)制字符串進(jìn)行處理。
假如參數(shù)中的一個(gè)為 TIMESTAMP 或 DATETIME 列,而其它參數(shù)均為常數(shù), 則在進(jìn)行比較前將常數(shù)轉(zhuǎn)為 timestamp。這樣做的目的是為了使ODBC的進(jìn)行更加順利。 注意,這不適合IN()中的參數(shù)!為了更加可靠,在進(jìn)行對(duì)比時(shí)通常使用完整的 datetime/date/time字符串。
在其它情況下,參數(shù)作為浮點(diǎn)數(shù)進(jìn)行比較。
在默認(rèn)狀態(tài)下,字符串比較不區(qū)分大小寫,并使用現(xiàn)有字符集(默認(rèn)為cp1252 Latin1,同時(shí)對(duì)英語也適合)。
為了進(jìn)行比較,可使用CAST()函數(shù)將某個(gè)值轉(zhuǎn)為另外一種類型。 使用CONVERT()將字符串值轉(zhuǎn)為不同的字符集。請(qǐng)參見。
以下例子說明了比較運(yùn)算中將字符串轉(zhuǎn)為數(shù)字的過程:
mysql> SELECT 1 > 6x;
-> 0
mysql> SELECT 7 > 6x;
-> 1
mysql> SELECT 0 > x6;
-> 0
mysql> SELECT 0 = x6;
-> 1
這個(gè)如果不注意好確實(shí)可以導(dǎo)致安全問題的,比如menzhi007里舉的那個(gè)列子,如果字符變量查詢沒有引號(hào),但是用某些函數(shù)過濾了不可以直接注射,那么可以直接提交0就可以繞過了...
關(guān)于“mysql如何實(shí)現(xiàn)比較運(yùn)算”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。