MYSQL隱式型別轉換

2022-04-25 08:36:00 字數 885 閱讀 4537

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 隱式轉換 談談MySQL隱式型別轉換

前言今天我們繼續回到mysql系列文章中,談一談mysql中隱式型別轉換。其實我最早知道是在慢sql優化中知道隱式型別轉換概念的 在說隱式型別轉換之前,首先我們通過乙個例項來看看是怎麼回事。資料結構 本文中所有的操作,都是基於該資料結構 有興趣的童鞋,可以實驗 create table t base...

MYSQL隱式型別轉換

今天看了下團隊發的xctf高校戰疫的wp,這裡先喊一句。楊大樹師傅太強了orz 幾乎沒幫啥忙,簡單的題目都被師傅們秒了,我進度太慢,跟不上,後面難的題目基本動不了。再喊一遍,星盟的師傅tql。再接再厲,希望下次能上師傅們,幫到師傅們解題。這裡本地搭建一下環境 用的老的語句 php7比較高的環境用新的...

MySQL的隱式型別轉換

官方解讀 1.如果乙個或兩個引數都是null,比較的結果是null,除了null安全的 相等比較運算子。對於null null,結果為true。不需要轉換 2.如果比較操作中的兩個引數都是字串,則將它們作為字串進行比較。3.如果兩個引數都是整數,則將它們作為整數進行比較。4.如果不與數字進行比較,則...