MySQL神奇where查詢條件

各位試一下查詢結果,會是全表查詢所有數據

#下面那是四個單引號,不是兩個雙引號
SELECT * FEOM table WHERE num = ''+''
#還有這句
SELECT * FEOM table WHERE num = '這句查詢'+'也很騷'

後續原因,繼續調查

分割線:




以下是老夫測試得出的結果

不帶列名搜索:
SELECT * FROM table WHERE ‘1試一試字符’ 全
SELECT * FROM table WHERE ‘試一試1字符’ 0
SELECT * FROM table WHERE ‘試一試字符1’ 0

SELECT * FROM table WHERE ‘0試一試字符’ 0
SELECT * FROM table WHERE ‘試一試0字符’ 0
SELECT * FROM table WHERE ‘試一試字符0’ 0

SELECT * FROM table WHERE ‘1試一試’+‘字符’ 全
SELECT * FROM table WHERE ‘試1一試’+‘字符’ 0
SELECT * FROM table WHERE ‘試一試1’+‘字符’ 0
SELECT * FROM table WHERE ‘試一試’+‘1字符’ 全
SELECT * FROM table WHERE ‘試一試’+‘字1符’ 0
SELECT * FROM table WHERE ‘試一試’+‘字符1’ 0

SELECT * FROM table WHERE ‘0試一試’+‘字符’ 0
SELECT * FROM table WHERE ‘試0一試’+‘字符’ 0
SELECT * FROM table WHERE ‘試一試0’+‘字符’ 0
SELECT * FROM table WHERE ‘試一試’+‘0字符’ 0
SELECT * FROM table WHERE ‘試一試’+‘字0符’ 0
SELECT * FROM table WHERE ‘試一試’+‘字符0’ 0

帶列名搜索:

SELECT * FROM table WHERE num = ‘1試一試’+‘字符’ 0
SELECT * FROM table WHERE num = ‘試1一試’+‘字符’ 全
SELECT * FROM table WHERE num = ‘試一試1’+‘字符’ 全
SELECT * FROM table WHERE num = ‘試一試’+‘1字符’ 0
SELECT * FROM table WHERE num = ‘試一試’+‘字1符’ 全
SELECT * FROM table WHERE num = ‘試一試’+‘字符1’ 全

SELECT * FROM table WHERE num = ‘0試一試’+‘字符’ 全
SELECT * FROM table WHERE num = ‘試0一試’+‘字符’ 全
SELECT * FROM table WHERE num = ‘試一試0’+‘字符’ 全
SELECT * FROM table WHERE num = ‘試一試’+‘0字符’ 全
SELECT * FROM table WHERE num = ‘試一試’+‘字0符’ 全
SELECT * FROM table WHERE num = ‘試一試’+‘字符0’ 全

網上搜到的一些幫助:
分析器先找到關鍵字SELECT,然後跳到FROM關鍵字將STUDENT表導入內存,並通過指針p1找到第一條記錄,接着找到WHERE關鍵字計算它的條件表達式,如果爲真那麼把這條記錄裝到一個虛表當中,p1再指向下一條記錄。如果爲假那麼p1直接指向下一條記錄,而不進行其它操作。一直檢索完整個表,並把虛表返回給用戶。

實際上在執行where 條件的時候 無論where後面的整體是什麼,最後的結果都強轉成了數字(強轉規則就是下面的) 然後通過轉的數字跟0作爲比較,如果是等於0則結果爲0 即false ,如果不爲0 結果爲1 即true ,所以 where 的是true 還是 false

方法一:SELECT CAST(‘123’ AS SIGNED);
方法二:SELECT CONVERT(‘123’,SIGNED);
方法三:SELECT ‘123’+0;
where後的條件,最終是以數字的形式進行比較,換言之where後的條件,最終生成的結果都是數字,所以要發生字符串向數字的轉換(SIGNED是int的意思)

//這句話存疑
換句話說,如果字符串無法直接轉換成數字,則字符串會進行前置數字正則匹配,成爲最終的結果。

持續更新中…
同時期待MySQL大神前來解答

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章