点击下方公众号「关注」和「星标」

回复“1024”获取独家整理的学习资料!

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

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

你还别不信,听叔一句劝,这里的水很深,有些东西,你把握不住…《潘嘎之交》。

好了,今天咱们就一起针对最膈应人的反斜杠(\),来看看都有哪些坑。

一、INSERT语句中有反斜杠(\)

1、实际测试

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

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

插入后的结果:

mysql> select * from demo0526;
+----+-----------------------+
| id | text                  |
+----+-----------------------+
|  1 | D:陈哈哈加班          |
|  2 | D:\陈哈哈\加班        |
|  3 | D:\陈哈哈\加班        |
|  4 | D:\\陈哈哈\\加班      |
|  5 | D:\\陈哈哈\\加班      |
+----+-----------------------+
5 rows in set (0.00 sec)

我们发现结果如下:

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

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

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

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

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

2、是啥原理?

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

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

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

二、SELECT查询反斜杠(\)

1、实际测试

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

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

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

mysql> SELECT * from demo0526 where text like '%\%';
Empty set (0.00 sec)mysql> SELECT * from demo0526 where text like '%\\%';
Empty set (0.00 sec)

啊!!我们用like '%%'、like '%%'查询后发现都查不到数据,纳尼?上面的我白学了吗?关注公众号民工哥技术之路,然后进入数据库专栏,可以获取我整理的 MySQL 系列技术文章、面试题和答案,非常齐全。

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

mysql> SELECT * from demo0526 where text like '%\\\\%';
+----+-----------------------+
| id | text                  |
+----+-----------------------+
|  2 | D:\陈哈哈\加班        |
|  3 | D:\陈哈哈\加班        |
|  4 | D:\\陈哈哈\\加班      |
|  5 | D:\\陈哈哈\\加班      |
+----+-----------------------+
4 rows in set (0.00 sec)

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

mysql> SELECT * from demo0526 where text like '%\\\\\\\\%';
+----+-----------------------+
| id | text                  |
+----+-----------------------+
|  4 | D:\\陈哈哈\\加班      |
|  5 | D:\\陈哈哈\\加班      |
+----+-----------------------+
2 rows in set (0.00 sec)
2、又是啥原理?

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

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

mysql> SELECT * from demo0526 where text = '\\\\';
+----+------+
| id | text |
+----+------+
|  7 | \\   |
+----+------+
1 row in set (0.00 sec)

总结

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

在日常工作中,也会经常碰到这种符号引发的问题,尤其是用户在界面填写的数据,建议要做相关限定,明确哪些符号不允许。另外关注公众号民工哥技术之路,然后进入数据库专栏,可以获取我整理的 MySQL 系列技术文章、面试题和答案,非常齐全。

作者:陈哈哈

https://blog.csdn.net/qq_39390545/article/details/117296607

我的新书:《 Linux系统运维指南 》已出版

推荐阅读 点击标题可跳转

几款超牛逼的 SSH 客户端工具!好用到爆

号称下一代监控系统!来看看它有多牛逼

再见 Teamviewer!这款国产轻量级远程桌面软件超牛逼

知乎上这个程序员火了。。。

合肥最最最牛逼的 IT 公司全在这了

再见 Wordpress!这个开源建站神器有点吊

再见 Jenkins !这款神器有点厉害!搞定自动化部署

一款吊炸天的 Docker 图形化管理工具,推荐给你!

Linux 虚拟内存,这理解很到位

卧槽! MySQL 中的反斜杠 \\ 真是太恶心了相关推荐

  1. MySQL 中的反斜杠 \\,真是太坑了!!

    作者 | 陈哈哈 来源 | https://blog.csdn.net/qq_39390545/article/details/117296607 在MySQL中有很多特殊符号都是相当恶心的,比如字符 ...

  2. MySQL 中的反斜杠 \\

    叙述 在MySQL中有很多特殊符号都是相当恶心的,比如字符串中有单引号(').双引号(").反斜杠(\)等等,同学们可以先脑补一下可能会出现啥问题? 在我们平时操作SQL中,一不注意这些符号 ...

  3. Mysql中查询反斜杠

    一. 模糊查询需要转四个反斜杠 二. 其他查询需要转两个反斜杠

  4. 反斜杠转义mysql java_mysql数据库中的反斜杠”\“怎么使用Java进行转义

    mysql数据库中的反斜杠"\"怎么使用Java进行转义 发布时间:2020-11-24 15:15:12 来源:亿速云 阅读:88 作者:Leah 这期内容当中小编将会给大家带来 ...

  5. 这MySQL里的反斜杠(\\)也太坑了吧!!真是醉了

    小伙伴想精准查找自己想看的MySQL文章?喏 → MySQL江湖路 | 专栏目录   在MySQL中有很多特殊符号都是相当恶心的,比如字符串中有单引号(').双引号(").反斜杠(\)等等, ...

  6. 使用java中replaceAll方法替换字符串中的反斜杠

    今天在项目中使用java中replaceAll方法将字符串中的反斜杠("\")替换成空字符串(""),结果出现如下的异常: 1 java.util.regex. ...

  7. php的转义字符quot;反斜杠quot;是,php如何去除转义字符中的反斜杠

    php去除转义字符中的反斜杠的方法:使用函数stripslashes去掉转义后字符串中的反斜杠,代码为[if (is_string($v)) {$array[$k] = stripslashes($v ...

  8. 黄聪:PHP去掉转义后字符串中的反斜杠\函数stripslashes

    addslashes函数主要是在字符串中添加反斜杠对特殊字符进行转义,stripslashes则是去掉转义后字符串中的反斜杠\,比如当你提交一段json数据到PHP端的时候可能会遇到json字符串中有 ...

  9. java 路径中代替斜杠_老生常谈java路径中的反斜杠和斜杠的区别

    JAVA中的斜杠 有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为"/":反斜杠的符号为"\". 斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符 ...

最新文章

  1. OpenCV alpha(权因子) 融合举例
  2. Leetcode-单调数列(896)
  3. VTK:Utilities之ArrayCalculator
  4. docker数据持久化数据卷
  5. [转载] 比较器(Comparable和Comparator)、自然排序、定制排序
  6. linux 软件安装命令介绍
  7. VC.【转】采用_beginthread/_beginthreadex函数创建多线程
  8. 小程序---小程序样式底部固定和顶部固定
  9. python日期相减得到年龄_在dataframe两列日期相减并且得到具体的月数实例
  10. 视频教程-nodejs教程-Node.js
  11. python统计英文文本词频和提取文本关键词
  12. 项目经理应怎么利用人工智能?
  13. CommandArgument的一种用法
  14. 数据的相似性和相异性的度量
  15. 寻宝游戏 - 利用iBeacon特性设计的iOS线下寻宝游戏 - 物联网小游戏
  16. 怎么知道客户痛点在哪里?
  17. 数字图像处理与Python实现-图像滤波-Frangi滤波器
  18. 10. Android MultiMedia框架完全解析 - MediaExtractor::Create函数的解析和FslExtractor分析
  19. jy-04-JAVASE02——HTTP
  20. android百度地图调用animateto 会报空指针异常,基于Android的百度地图应系统毕业设计.docx...

热门文章

  1. dedecms教程:织梦dedecms5.7版自动给图片添加alt属性的方法
  2. 逆战网络连接断开连接服务器超时_逆战服务器连接断开 与服务器连接断开的原因...
  3. 基于matlab的正交振幅调制与解调,基于MATLAB的正交振幅调制与解调仿真分析(一)...
  4. 安装sybase12.0,运行时报错异常。
  5. 如何自动配置项目版本?只需一个简单的服务
  6. (电脑杂事) WSP版的word中图表链接失效的一种解决方案
  7. 用计算机制作汽车碰撞,国内外汽车碰撞计算机模拟研究的现状和趋势.pdf
  8. 服务器文件柜系统,超高频RFID智能文件柜方案
  9. 程序员如何在职场上少走弯路?程序员的发展路径有哪些?
  10. linux下I2C驱动体系结构及在FL2440开发板上的具体实现