了解MySQL的隐式转化
发布时间:2022-01-19 20:41:21
在MySQL中。当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion)。那么什么是“隐式转换”呢?让我们一起来了解一下吧!
当我们对不同类型的值进行比较的时候,为了使得这些数值「可比较」(也可以称为类型的兼容性),MySQL会做一些隐式转化(Implicit type conversion)。比如下面的例子:
很明显,上面的SQL语句的执行过程中就出现了隐式转化。并且从结果们可以判断出,第一条SQL中,将字符串的“1”转换为数字1,而在第二条的SQL中,将数字2转换为字符串“2”。
MySQL也提供了CAST()函数。我们可以使用它明确的把数值转换为字符串。当使用CONCA()函数的时候,也可能会出现隐式转化,因为它希望的参数为字符串形式,但是如果我们传递的不是字符串呢:
隐式转化规则
翻译为中文就是:
1.两个参数至少有一个是 NULL 时,比较的结果也是 NULL,例外是使用
2.两个参数都是字符串,会按照字符串来比较,不做类型转换
3.两个参数都是整数,按照整数来比较,不做类型转换
4.十六进制的值和非数字做比较时,会被当做二进制串
5.有一个参数是 TIMESTAMP 或 DATETIME,并且另外一个参数是常量,常量会被转换为 timestamp
6.有一个参数是 decimal 类型,如果另外一个参数是 decimal 或者整数,会将整数转换为 decimal 后进行比较,如果另外一个参数是浮点数,则会把 decimal 转换为浮点数进行比较
7.所有其他情况下,两个参数都会被转换为浮点数再进行比较
注意点
安全问题:假如 password 类型为字符串,查询条件为 int 0 则会匹配上。
相信上面的例子,一些机灵的同学可以发现其实上面的例子也可以做sql注入。
假设网站的登录那块做的比较挫,使用下面的方式:
如果username输入的是a' OR 1='1,那么password随便输入,这样就生成了下面的查询:
就有可能登录系统。其实如果攻击者看过了这篇文章,那么就可以利用隐式转化来进行登录了。如下:
把字符串“aa”和1进行求和,得到1,因为“aa”和数字1的类型不同,MySQL官方文档告诉我们:查看warnings可以看到隐式转化把字符串转为了double类型。但是因为字符串是非数字型的,所以就会被转换为0,因此最终计算的是0+1=1
上面的例子是类型不同,所以出现了隐式转化,那么如果我们使用相同类型的值进行运算呢?
之所以出现这种情况,是因为 “+” 为算术操作符arithmetic operator 这样就可以解释为什么a和b都转换为double了。因为转换之后其实就是:0+0=0了。
在看一个例子:
现在就看也很好的理解上面的例子了吧。a+b=c结果为1,1在MySQL中可以理解为TRUE,因为'a'+'b'的结果为0,c也会隐式转化为0,因此比较其实是:0=0也就是true,也就是1.
第二个需要注意点就是防止多查询或者删除数据
上面的例子本意是查询id为5的那一条记录,结果把id为6的那一条也查询出来了。我想说明什么情况呢?有时候我们的数据库表中的一些列是varchar类型,但是存储的值为‘1123’这种的纯数字的字符串值,一些同学写sql的时候又不习惯加引号。这样当进行select,update或者delete的时候就可能会多操作一些数据。所以应该加引号的地方别忘记了。
关于字符串转数字的一些说明
从上面的例子可以看出,当把字符串转为数字的时候,其实是从左边开始处理的。
1.如果字符串的第一个字符就是非数字的字符,那么转换为数字就是0
2.如果字符串以数字开头
(1)如果字符串中都是数字,那么转换为数字就是整个字符串对应的数字
(2)如果字符串中存在非数字,那么转换为的数字就是开头的那些数字对应的值


猜你喜欢
- win10笔记本无法打开falogin.cn怎么办?最近有用户新购买了一个迅捷无线路由器,当需要进入设置的时候却遇到了无法打开管理地址的现象
- 想要简便的更改单个应用的音量和输出设备?一些mac音频控制工具必不可少,小编今天整理的这四款在音频控制管理方面堪称是神器,随时随地调整Mac
- 我们平时在玩《赛博朋克2077》的时候,需要在升级后自行配置升级点数。如果一不小心点错了,就会对后续游戏体验造成影响。不过,游戏给予了玩家重
- 时正常开机时是无需输入用户名的,但每次注销后登录就需要输入账户名,烦不胜烦,下面有个方法可以解决这个问题,正为此烦恼的你可以看看某位用户的W
- 如何在Word 2013中设置段落格式的技巧?在段落级别,Word 2013中的自动套用格式可帮助您快速处理其他一些令人讨厌的格式设置问题。
- 有时候,在使用Word进行文字编辑的时候,突然遇到断电,或者电脑自动关机、死机等故障的时候,导致辛辛苦苦做出来的劳动成果全部泡汤,是很多网友
- 为解决线性回归法成本分解中复杂的数学计算问题,可借助于EXCEL电子制表系统的相关函数,通过计算机进行简便的操作就可实现。以下是小编为您带来
- 相信很多用户电脑都会做还原备份,有时候系统会出现问题,有时我们想将win10系统还原到某个时间点。那么具体怎么操作呢?下面就演示下win10
- ISO格式的镜像其实没有什么制作难度,下面教大家怎么快速简单制作ISO格式的镜像,教程使用到的都是Mac官方的命令。制作好的ISO格式镜像可
- 计算机管理功能可以实现一些比较特殊个性化的设置,手动打开方法为:C:\WINDOWS\system32目录下找compmgmt.msc这个程
- 在之前的教程中,小编已经向大家介绍了使用嗨格式录屏大师录制课程视频及网络视频的方法,接下来,小编要继续为大家介绍使用嗨格式录屏大师录制游戏视
- 电脑装win10系统的话,内存4G够用吗?还是换成8G好?原来是2+2G,有必要换成8或者4+4G吗?以上为题主的问题及问题描述。电脑的内存
- excel表格怎么插入红色的十字星?excel表格中想要插入十字星图形,该怎么插入呢?下面我们就来看看详细的教程,需要的朋友可以参考下exc
- 鼠标是非常重要的,在使用电脑的时候没有鼠标是一件很麻烦的事情,特别是台式电脑,没有鼠标根本无法操作。但是使用鼠标难免也会遇上一些让人措手无策
- IE9字体模糊和锯齿怎么办?小伙伴们在使用IE9.0浏览器后,发现浏览某些网页上面的文字字体模糊,有些有锯齿,却不知道该怎么办?下面,小编就
- 当用户在wps软件中编辑文档时,会根据自己的实际情况来插入几张图片在文章中,相信大部分的用户都有遇打过这种情况,但是在插入多张的图片时,用户
- 如何使用ps给照片添加双色效果?ps是一个图片编辑软件,功能十分强大,用户可以使用其对图片进行编辑优化。想要使用ps给照片添加双色效果,具体
- Win11系统桌面界面发生了很大的调整,与之前的操作系统相差很多,很多使用旧系统已经习惯的用户可能会很不习惯,发现回收站在桌面上没有显示了,
- 开通了优酷会员还有广告怎么办?“我在优酷开通了会员并且已付费,为什么看电视剧还是有广告?”我们经常听到这样的抱怨。下面,小编就为大家介绍下开
- 如何通过excel数据有效性的设定 可避免重复输入首先将光标移到“性别”一列的顶部,这时光标变成向下的箭头,此时点击将全选这一整列。切换到“