天天看点

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
任意类型 十六进制 二进制