mysql隱時型別轉換規則 MYSQL隱式型別轉換

2021-10-18 12:09:10 字數 868 閱讀 2094

mysql隱式型別轉換

關於官方文件中的理解大致是:

如果兩個引數比較,有至少乙個null,結果就是null,除了是用null<=>null 會返回1。不做型別轉換

兩個引數都是字串,按照字串比較。不做型別轉換

兩個引數都是整數,按照整數比較。不做型別轉換

如果不與數字進行比較,則將十六進製制值視為二進位制字串。

有乙個引數是 timestamp 或 datetime,並且另外乙個引數是常量,常量會被轉換為時間戳

有乙個引數是 decimal 型別,如果另外乙個引數是 decimal 或者整數,會將整數轉換為 decimal 後進行比較,如果另外乙個引數是浮點數,則會把 decimal 轉換為浮點數進行比較

所有其他情況下,兩個引數都會被轉換為浮點數再進行比較

最後那一句話很重要,說明如果我是字串和數字比較,需要將字串轉為浮點數,這很明顯會轉換失敗

在這裡我試了試如果是字串和數字比較:

可以看到在進行型別轉換的時候,將字串轉換的時候會產生乙個warning,轉換的結果為0,但是如果字串開頭是數字的時候還是會從數字部分截斷,轉換為數字。

現在可以很好理解開頭說的為什麼username=0會導致返回資料了,就是因為這裡會將資料轉換為浮點數比較,但是字串轉換會出問題,從而返回0使得0=0從而為true得到結果,而後面passwd查詢少一組資料的原因就是admin的passwd欄位第乙個字元是2 從而返回2 並非為0。

**:

Mysql 資料型別隱式轉換規則

今天遇到乙個慢查詢,查詢日誌找到慢查詢語句是這樣的 select from convert test where areacode 0001 and period 20170511 and period 20170511 convert test表結構如下 create table convert ...

C語言隱式型別轉換規則

先看程式 include include int main int argc,char argv 執行結果是 1 1 解釋 按步驟進行.1.如果其中乙個運算元為long double型別,則另乙個運算元被轉換為long double.2.否則,如果其中乙個運算元為double,則另乙個運算元被轉換為...

筆記 隱式轉換規則

學習並背誦全文型別 undefined null string boolean number 值undefined null 所有字串 true false 所有數字 nan object的成員叫物件,包括array,function,math,date,json,regexp等除了原始值之外的所有...