在MySQL中執行SQL查詢時,如果SQL語句中字段的資料類型和表中對應字段的資料類型不一緻時,MySQL查詢優化器會将資料的類型進行隐式轉換。
以下面的資料為例,我根據
username
字段查詢
user
表,得出如下結果:
SELECT * FROM `user` WHERE `username` = 0;
複制
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAjM2EzLcd3LcJzLcJzdllmVldWYtl2Pn5GcukzMlFjN5ITZ4gjZ3IWZmZzNxQDMjhTOkRjZ2gzNzUTMvwlN5EzM3ETOtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
顯而易見,這不是我們想要的結果。表中
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 |
任意類型 | 十六進制 | 二進制 |