Mysql隱式型別轉換原則

2022-03-16 06:01:13 字數 611 閱讀 8250

mysql 的隱式型別轉換原則:

- 兩個引數至少有乙個是 null 時,比較的結果也是 null,例外是使用 <=> 對兩個 null 做比較時會返回 1,這兩種情況都不需要做型別轉換

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

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

- 十六進製制的值和非數字做比較時,會被當做二進位制串,和數字做比較時會按下面的規則處理

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

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

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

注意乙個安全問題:假如 password 型別為字串,查詢條件為 int 0 則會匹配上。

由於 mysql 隱式型別轉換規則比較複雜,依賴 mysql 隱式轉換很容易出現各種想想不到的問題,而且 mysql 隱式型別轉換本身也是非常耗費 mysql 伺服器效能的,所以非常不推薦這樣使用。

詳見博文:

mysql 隱式轉換 談談MySQL隱式型別轉換

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

MYSQL隱式型別轉換

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

MYSQL隱式型別轉換

mysql隱式型別轉換 關於官方文件中的理解大致是 如果兩個引數比較,有至少乙個null,結果就是null,除了是用null null 會返回1。不做型別轉換 兩個引數都是字串,按照字串比較。不做型別轉換 兩個引數都是整數,按照整數比較。不做型別轉換 如果不與數字進行比較,則將十六進製制值視為二進位...