Mysql 隐式类型转换
一、实例操作
如下图user表结构
查询语句1
执行结果:
查询语句2
执行结果:
查询语句3
执行结果:
查询语句4
执行结果:
结果分析:
从上面四则查询语句中可以看出 mobile的字段为字符类型时,当查询时等式是字符类型和数字类型时执行结果不一致,而status的字段为数字类型, 当查询时等式是字符类型和数字类型时执行结果一致。这是为什么呢?
二、mysql 隐式类型转换
上述案例其真实的原因时mysql的隐式类型转换,那什么是隐式类型转换呢?
1. 隐式类型转换规则 官方文档
- 如果一个或两个参数均为NULL,则比较的结果为NULL,除了 相等比较运算符。对于NULL NULL,结果为true。
- 如果比较操作中的两个参数都是字符串,则将它们作为字符串进行比较。
- 如果两个参数都是整数,则将它们作为整数进行比较。
- 如果不与数字比较,则将十六进制值视为二进制字符串。
- 如果参数之一是 timestamp 或 datatime column,而另一个参数是常量,则在执行比较之前,该常量将转换为时间戳。
- 如果参数之一是十进制值,则比较取决于另一个参数。如果另一个参数是十进制或整数值,则将参数作为十进制值进行比较;如果另一个参数是浮点值,则将参数作为浮点值进行比较。
- 在所有其他情况下,将参数作为浮点数(实数)进行比较。例如,将字符串和数字操作数进行比较,将其作为浮点数的比较。
通过隐式类型转换可以得出上述示例的结果:当查询中有数字时那么会将字符串转化成数字进行比较。所以当你的列为字符串时那么需要将列中字符串进行类型格式转换而进行字符格式转换之后则与索引不一致;当你的列为数字时查询等式为字符串时只是把查询的常量转成数字并不影响列的类型所以依然可以使用索引并没有破坏索引的类型。
2. 隐式类型转换实例
3. 避免隐式类型转换
可以使用内置函数对类型强制性转换
case( value as type)
conver(value,type)
我们需要充分了解吗MySQL里隐式类型转换的规则,同时我们日常在写SQL时一定要检查参数类型与数据库字段类型是否一致,否则可能造成隐式类型转换,不能正常应用索引,造成慢查询,甚至拖垮整个数据库服务集群。如果参数不一致,也可以考虑使用CAST函数显性转换成一致类型。
Mysql 隐式类型转换相关推荐
- mysql 将字符串转换数字类型的_MySQL 字符串类型用数字可以查出来 MySQL字符串类型会转换成数字 MySQL隐式类型转换...
一.发现问题 1.在一次MySQL查询中,某字段为 varchar 字符串类型,传入参数值为 int 数字类型,发现查询的结果和预期的不一致. 如: 某两列 name='11' , name = '1 ...
- Mysql隐式类型转换
概述 在开发规范中,我们往往会要求研发避免在where条件中出现隐式类型转换,这么要求大概有以下两方面的原因: 隐式类型转换可能导致索引失效: 隐式类型转换可能产生非预期的结果. 何为隐式转换:即在w ...
- MySQL 隐式类型转换导致条件等号的异常
2019独角兽企业重金招聘Python工程师标准>>> 问题就不复制了直接给出原博客地址,但是原文并没有给出解决方案. http://www.wupco.cn/?p=93 解决方案: ...
- mysql 注入关键字waf_利用mysql的隐式类型转换绕过waf注入
今天做的一道ctf题,要求绕过waf去注入,可以通过mysql隐式类型转换的特性去绕过waf,在这里记录下来供大家学习一下 题目地址:题目地址(比赛结束后可能会失效) HINT:我都过滤了,看你怎么绕 ...
- 《MySQL tips:隐式类型转换与隐式字符编码转换对查询效率的影响》
维护一个交易系统,交易记录表tradelog包含交易流水号(tradeid).交易员id(operator).交易时间(t_modified)等字段. create table 'tradelog' ...
- MySQL的隐式类型转换
引入 在项目中调用别的部门的模糊查询接口,发现还根据模糊字段搜索主键,还搜出了结果.SQL大概是这个意思Select * from tablea where name like "%1Tes ...
- mysql 隐式失误_评“MySQL 隐式转换引起的执行结果错误”
今天看到一篇关于MySQL隐式转换引发执行结果错误的文章: ====================================================================== ...
- MySQL隐式转化整理
MySQL隐式转化整理 原文:http://www.cnblogs.com/rollenholt/p/5442825.html 前几天在微博上看到一篇文章:价值百万的 MySQL 的隐式类型转换感觉写 ...
- MySQL 隐式转换 字符串和整型说明
MySQL 隐式转换 字段类型定义 CREATE TABLE `user` (`id` int(10) NOT NULL AUTO_INCREMENT COMMENT '编号',/* ...... * ...
最新文章
- python获取绝对路径_python 获取文件本身的绝对路径
- 西南科技大学计算机综合大纲,2019年西南科技大学信息工程学院考研复试大纲...
- 43. 压缩组件(4)
- linux系统uptime解读,Linux中的uptime命令详解
- spring aop和事务同时开启带来的一些问题
- 获取阿里云播放器当前播放速率
- Excel表格的35招必学秘技
- [对于蓝桥杯要说的一二体会]
- 210714 cypress
- 百度定位获取当前信息
- 禁用ubuntu16.04的guest账户
- 云呐-fsu动环监控单元,fsu动环监控单元是什么
- 虚拟机安装和破解密码
- 苹果手表支持心电图功能,可能还是逃不过噱头的命运
- Git学习笔记使用记录
- Android5.0录屏
- A Survey of Symbolic Execution Techniques 符号执行综述
- 自媒体人必备,5个免费找短视频素材的网站,赶紧收藏
- java 字符串判空_java判断字符串String是否为空问题浅析
- Dell Wyse 3040瘦客户机,EMMC刷入OpenWrt,并启用自带的无线网卡