码迷,mamicode.com
首页 > 数据库 > 详细

谈谈 MySQL 隐式类型转换

时间:2018-09-18 14:22:59      阅读:244      评论:0      收藏:0      [点我收藏+]

标签:原来   bsp   set   语句   com   字段   main   操作   不同类   

前言

今天我们继续回到MySQL系列文章中,谈一谈MySQL中隐式类型转换。(其实我最早知道是在慢SQL优化中知道隐式类型转换概念的),在说隐式类型转换之前,首先我们通过一个实例来看看是怎么回事。

数据结构

本文中所有的操作,都是基于该数据结构(有兴趣的童鞋,可以实验):

 

引子

首先我们基于上述数据结构中,我们来看看下面这个执行计划:

explain select * from t_base_user where telephone=12345678901;

细心的童鞋应该已经看出来了,为什么数据结构中已经在telephone字段上新建了idx_telephone索引,而上述语句并没有走索引,而是全表扫描。这是为什么呢?带着这疑问,我们来看看今天的主角——MySQL隐式类型转换

什么是隐式类型转换?

在MySQL中:

当操作符与不同类型的操作数一起使用时,会发生类型转换以使操作数兼容。则会发生转换隐式

也就是说,MySQL会根据需要自动将数字转换为字符串,将字符串转换数字。看到这个概念之后,是不是有一种茅塞顿开的感觉。哦… 原来在数据结构中telephone字段为字符串(varchar)类型,而我们传的手机号是数字类型。现在我们将SQL修改下:

select * from t_base_user where telephone=’12345678901′;

再看看上述语句的执行计划:

explain select * from t_base_user where telephone=’12345678901′;

从这里看,现在语句已经走索引了。为了加深我们对隐式类型转换的印象,我们再多看看几个隐式类型转换案例:

案例一: 字符串转换为数字

mysql > SELECT 1+’1′;

结果:

mysql > 2

案例二: 数字转换为字符串

mysql -> SELECT CONCAT(1024,’ andyqian’);

结果:

‘1024,’ andyqian’;

此时CONCAT(字符拼接)函数就将1024进行了隐式类型转换。

谈谈 MySQL 隐式类型转换

标签:原来   bsp   set   语句   com   字段   main   操作   不同类   

原文地址:https://www.cnblogs.com/lupingruanjian/p/9668506.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!