在MySQL中执行SQL查询时,如果SQL语句中字段的数据类型和表中对应字段的数据类型不一致时,MySQL查询优化器会将数据的类型进行隐式转换。
以下面的数据为例,我根据 username
字段查询 user
表,得出如下结果:
SELECT * FROM `user` WHERE `username` = 0;
显而易见,这不是我们想要的结果。表中 username
字段是 string
类型,而我们传入的是 int
类型,MySQL在执行这段SQL语句时,将 int
类型的 0
转换为了 double
类型
下表是MYySQL隐式类型转换规则:
输入类型 | 表字段类型 | 转换后的类型 |
---|---|---|
NULL | 任意类型 | NULL |
STRING | STRING | STRING |
INT | INT | INT |
INT | TIMESTAMP | TIMESTAMP |
INT | DATETIME | TIMESTAMP |
INT | DOUBLE | DOUBLE |
INT | STRING | DOUBLE |
任意类型 | DECIMAL | DECIMAL |
任意类型 | 十六进制 | 二进制 |