Mysql隐式类型转换方式 |
一、实例操作如下图user表结构 查询语句1
查询语句2
查询语句3
查询语句4
从上面四则查询语句中可以看出 mobile的字段为字符类型时,当查询时等式是字符类型和数字类型时执行结果不一致,而status的字段为数字类型,当查询时等式是字符类型和数字类型时执行结果一致 。 这是为什么呢? 二、mysql 隐式类型转换上述案例其真实的原因时mysql的隐式类型转换,那什么是隐式类型转换呢? 1. 隐式类型转换规则官方文档
通过隐式类型转换可以得出上述示例的结果:当查询中有数字时那么会将字符串转化成数字进行比较 。 所以当你的列为字符串时那么需要将列中字符串进行类型格式转换而进行字符格式转换之后则与索引不一致; 当你的列为数字时查询等式为字符串时只是把查询的常量转成数字并不影响列的类型所以依然可以使用索引并没有破坏索引的类型 。 2. 隐式类型转换实例3. 避免隐式类型转换可以使用内置函数对类型强制性转换
我们需要充分了解吗MySQL里隐式类型转换的规则,同时我们日常在写SQL时一定要检查参数类型与数据库字段类型是否一致,否则可能造成隐式类型转换,不能正常应用索引,造成慢查询,甚至拖垮整个数据库服务集群 。 如果参数不一致,也可以考虑使用CAST函数显性转换成一致类型 。 总结以上为个人经验,希望能给大家一个参考,也希望大家多多支持 。 |