关于MySQL隐式转换的一些细节
MySQL在执行语句进行查询时,如果字段类型与等号右侧类型不一致,默认会进行转换。
- 两个参数都是字符串,会按照字符串来比较,不做类型转换
- 两个参数都是整数,按照整数来比较,不做类型转换
- int类型的数值可以是整型或者是字符串类型,类型不正确不会影响执行索引
- 字符串类型数据在查询时必须是字符串,否则会扫描全表
- 十六进制的值和非数字做比较时,会被当做二进制串
- 有一个参数是
TIMESTAMP或DATETIME,并且另外一个参数是常量,常量会被转换为timestamp - 当字段是字符串跟数字比较时,
MySQL不能使用索引来加快查询。 - date转
dateTime或者timeStamp追加00:00:00 - date转time无意义,直接为
00:00:00 datetime或者timestamp转 date 直接截取date字段datetime或者timestamp转 time 直接截取time字段- time 转
datetime或者timestamp按照字符串进行截取 ,如:23:12:13 -> 2023-12-13 - cast函数只能转
datetime,不能转timestamp
隐式转换会造成不走索引,使你的代码变成慢SQL,并且可能会导致查询结果不准确的问题。
参考链接: