天天看點

MySQL隐式類型注入與隐式轉換

在MySQL中執行SQL查詢時,如果SQL語句中字段的資料類型和表中對應字段的資料類型不一緻時,MySQL查詢優化器會将資料的類型進行隐式轉換。

以下面的資料為例,我根據

username

字段查詢

user

表,得出如下結果:

SELECT * FROM `user` WHERE `username` = 0;           

複制

MySQL隐式類型注入與隐式轉換

顯而易見,這不是我們想要的結果。表中

username

字段是

string

類型,而我們傳入的是

int

類型,MySQL在執行這段SQL語句時,将

int

類型的

轉換為了

double

類型

下表是MYySQL隐式類型轉換規則:

輸入類型 表字段類型 轉換後的類型
NULL 任意類型 NULL
STRING STRING STRING
INT INT INT
INT TIMESTAMP TIMESTAMP
INT DATETIME TIMESTAMP
INT DOUBLE DOUBLE
INT STRING DOUBLE
任意類型 DECIMAL DECIMAL
任意類型 十六進制 二進制