mysql中如何使用断言(MySQL中的反斜杠)
mysql中如何使用断言(MySQL中的反斜杠)
2024-11-22 02:34:31  作者:赚很多钱  网址:https://m.xinb2b.cn/tech/hpc160644.html

在MySQL中有很多特殊符号都是相当恶心的,比如字符串中有单引号(')、双引号(")、反斜杠(\)等等,同学们可以先脑补一下可能会出现啥问题?,下面我们就来聊聊关于mysql中如何使用断言?接下来我们就一起去了解一下吧!


mysql中如何使用断言

在MySQL中有很多特殊符号都是相当恶心的,比如字符串中有单引号(')、双引号(")、反斜杠(\)等等,同学们可以先脑补一下可能会出现啥问题?

在我们平时操作SQL中,一不注意这些符号就会给你背上一口锅。

你还别不信,听叔一句劝,这里的水很深,有些东西,你把握不住…《潘嘎之交》好了,今天咱们就一起针对最膈应人的反斜杠(\),来看看都有哪些坑。

一、INSERT语句中有反斜杠(\)1、实际测试

咱们用下面这些SQL来测试一下反斜杠(\)在INSERT语句中会是啥样?

INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\陈哈哈\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\陈哈哈\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\陈哈哈\\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\\陈哈哈\\\\加班');INSERTINTO`demo0526`(`id`,`text`)VALUES(null,'D:\\\\\陈哈哈\\\\\加班');

插入后的结果:

mysql>select*fromdemo0526; ---- ----------------------- |id|text| ---- ----------------------- |1|D:陈哈哈加班||2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班| ---- ----------------------- 5rowsinset(0.00sec)

我们发现结果如下:

当字符串中有1个反斜杠,插入后算0个。

当字符串中有2个反斜杠,插入后算1个。

当字符串中有3个反斜杠,插入后算1个。

当字符串中有4个反斜杠,插入后算2个。

当字符串中有5个反斜杠,插入后算2个。

2、是啥原理?

后来发现,原因其实很简单,在MySQL中,反斜杠在字符串中是属于转义字符,经过语法解析器解析时会进行一次转义,所以当我们insert反斜杠(\)字符时,如 insert “\” 在数据库中最终只会存储"",第一个反斜杠(\)被当做转义字符处理。

同理,像这种 D:\\陈哈哈\\加班 字符串,语法解析器解析到第三个反斜杠(\)时,又会把它当做下一个转义字符进行处理,因此D:\\陈哈哈\\加班入库后变成了D:\陈哈哈\加班。

所以我们在代码中处理插入语句碰到反斜杠时,注意\是否已经改成\,否则入库后字符串会不一致。

二、SELECt查询反斜杠(\)1、实际测试

我们还是沿用上面的表数据,直接用like模糊匹配来测试一下。

mysql>select*fromdemo0526; ---- ----------------------- |id|text| ---- ----------------------- |1|D:陈哈哈加班||2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班| ---- -----------------------

我们先用单个反斜杠和两个反斜杠看看能查到啥玩意儿

mysql>SELECt*fromdemo0526wheretextlike'%\%';Emptyset(0.00sec)mysql>SELECt*fromdemo0526wheretextlike'%\\%';Emptyset(0.00sec)

啊!!我们用like '%%'、like '%\%'查询后发现都查不到数据,纳尼?上面的我白学了吗?

别着急,我会告诉你SELECt语句中四个反斜杠(\\)代表一个么?呀,我赶快换成like '%\\%'试一试。

mysql>SELECT*fromdemo0526wheretextlike'%\\\\%'; ---- ----------------------- |id|text| ---- ----------------------- |2|D:\陈哈哈\加班||3|D:\陈哈哈\加班||4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班| ---- ----------------------- 4rowsinset(0.00sec)

喔?那我如果查询表中带有两个反斜杠(\)的数据,岂不是要like八个。。。。别拦我,我看看tm是谁设计的这规则。

mysql>SELECt*fromdemo0526wheretextlike'%\\\\\\\\%'; ---- ----------------------- |id|text| ---- ----------------------- |4|D:\\陈哈哈\\加班||5|D:\\陈哈哈\\加班| ---- ----------------------- 2rowsinset(0.00sec)

2、又是啥原理?

原来在mysql的like语法中,like后边的字符串除了会在语法解析时转义一次外,还会在正则匹配时进行第二次的转义。因此如果期望最终匹配到"",就要反转义两次,也就是由"\\"到"\"再到""。

如果是普通的精确查询(=),则无需第二次的正则转义,和INSERT语句一样。

mysql>SELECt*fromdemo0526wheretext='\\\\'; ---- ------ |id|text| ---- ------ |7|\\| ---- ------ 1rowinset(0.00sec)

总结

好了,看到这里同学们有什么感受呢?是不是发现MySQL中还是存在很多不方便的语法,进步空间还很大呀~~

在日常工作中,也会经常碰到这种符号引发的问题,尤其是用户在界面填写的数据,建议要做相关限定,明确哪些符号不允许。

作者:陈哈哈

原文链接:https://blog.csdn.net/qq_39390545/article/details/117296607

  • 带锦字寓意好的男孩名字(锦这名婴儿的名字有啥特殊含义)
  • 2024-11-22锦这名婴儿的名字有啥特殊含义照片中的女婴是嘉兴平湖姚东平的千金夫妻俩给女儿取名时用了一个“锦”字这其中有什么特殊含义呢?事情要从10月31日说起我紧张!早高峰车也多!当天,姚东平妻子突然肚痛难忍,临盆在即由于是二胎,产妇年纪也偏。
  • 春运要来了出行必看7条(这份干货满满的回家指南)
  • 2024-11-22这份干货满满的回家指南今天起(1月7日)为期40天的春运大幕正式拉开辛苦工作一年回家团圆是在外工作的人最期待的事福州多措并举全力保障春运安全畅通01福州铁路据了解,春运40天,福州火车站预计发送旅客200万人,春运最高峰日。
  • 粉底液和防晒霜哪个先用最好(粉底液和防晒霜使用顺序)
  • 2024-11-22粉底液和防晒霜使用顺序粉底液和防晒霜使用顺序先用粉底液还是防晒霜先用防晒霜,再用粉底防晒霜保护的是肌肤不受紫外线的伤害,要用在最底层,而隔离一般是指防止肌肤被空气、粉尘和彩妆的侵害,要用在彩妆之前要记住,防晒霜是护肤最后一。
  • 哪个星座不努力就能当学霸(学渣变学霸的几个星座)
  • 2024-11-22学渣变学霸的几个星座导语:在我们的学生时代身边总有成绩超前的学霸,也有始终垫底,不爱学习的学渣有些人聪明机灵却缺乏对学习的兴趣,又不愿意努力,肆意挥霍自己的青春,最终他们成了一枚学渣但是学霸学渣并不代表一个人将来的成就,。
  • 怦然星动会拍电视剧吗
  • 2024-11-22怦然星动会拍电视剧吗杨幂、李易峰将一同出演电影《怦然星动》,电影将会是以娱乐圈为背景,讲述大明星和自己的小助理在娱乐圈中的沉沉浮浮并在坎坷中培养出爱情的故事小演员苏星宇和小助理田心偶然相识又分开,5年后事业成功的两人再次。
  • 杨洋唐嫣盗墓笔记发布会(钟汉良执导沙漏)
  • 2024-11-22钟汉良执导沙漏去年钟汉良宣布执导《沙漏》到现在已经快一年了,但是似乎还没有太大的动静《沙漏》是饶雪漫经典文学作品改编,主要讲述了女生莫醒醒的青春故事继电影《左耳》之后的青春疼痛系列新作,该片是一部青春爱情类型电影,。
  • 3-5万元新能源车功能对比(新能源汽车上的这6项配置)
  • 2024-11-22新能源汽车上的这6项配置今日聊一聊:新能源汽车上那些所谓的“科技配置”,看似花里胡哨,除了成为宣传噱头、抬高车价,实则一点卵用都没有,你中枪了吗?如今的新能源汽车呈现两个极端,低端车型动力弱、续航短、配置寒酸,其实就是一台“。
  • 女人喜欢听哪些坏坏的情话(有三句情话女人最爱听)
  • 2024-11-22有三句情话女人最爱听01.爱情是卿卿我我的甜蜜,有人说:“爱情是最奢侈的享乐”的确,要拥有真正美好的爱情,往往需要付出实际行动心里的爱不表达出来,就不是真正的情意,对方也很难察觉到你对他的深情爱情,也不是想当然的永不分离。