MySQL隐式类型注入与隐式转换

发布日期: 2019-12-05 21:03:15 作者: Stephen 评论: 0

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

快来抢沙发