关于MySQL隐式转换的一些细节

1,018 阅读1分钟

关于MySQL隐式转换的一些细节

MySQL在执行语句进行查询时,如果字段类型与等号右侧类型不一致,默认会进行转换。

  • 两个参数都是字符串,会按照字符串来比较,不做类型转换
  • 两个参数都是整数,按照整数来比较,不做类型转换
  • int类型的数值可以是整型或者是字符串类型,类型不正确不会影响执行索引
  • 字符串类型数据在查询时必须是字符串,否则会扫描全表
  • 十六进制的值和非数字做比较时,会被当做二进制串
  • 有一个参数是 TIMESTAMPDATETIME,并且另外一个参数是常量,常量会被转换为 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,并且可能会导致查询结果不准确的问题。

参考链接:

SQL隐式转换

小米技术团队