一個網友遇到的sql語句中,where條件僅指定了一個字段,沒有具體條件,卻意外地查詢到了數據。經觀察發現,只有數字開頭的記錄會被查詢出來,而字母和0開頭的記錄被過濾掉了。
根據MySQL文檔中關于where子句的解釋,where條件是一個表達式,它的值為真則選擇行。因此,在這種情況下,uuid字段本身被當作了一個表達式來求值。
可以將where uuid視為無條件限制,因為任何值都可以被轉換為真。因此,所有記錄都會被查詢出來。但是,由于數據類型是varchar,mysql會自動嘗試將其轉換成number類型,因此只能成功轉換成數字開頭的記錄,而字母和0開頭的記錄則無法轉換成數字,便被過濾掉了。