MySQL里的反斜杠(\\)的使用

目录
  • 一、INSERT语句中有反斜杠(\)
    • 1. 实际测试
    • 2. 原理
  • 二、SELECT查询反斜杠(\)
    • 1. 实际测试
    • 2. 原理

一、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:\\陈哈哈\\加班      |
+----+-----------------------+
5 rows in set (0.00 sec)

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

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 '%\%'查询后发现都查不到数据,纳尼?上面的我白学了吗?

别着急,我会告诉你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 反斜杠内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python3.6-MySql中插入文件路径,丢失反斜杠的解决方法

    如下所示: 如上图,replace即可. 以上这篇Python3.6-MySql中插入文件路径,丢失反斜杠的解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • mysql语句如何插入含单引号或反斜杠的值详解

    前言 本文主要给大家介绍了关于mysql语句插入含单引号或反斜杠值的相关内容,下面话不多说了,来一起看看详细的介绍吧 比如说有个表,它的结构是这个样子的 CREATE TABLE `activity` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'ID', `title` varchar(255) NOT NULL COMMENT '活动标题', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET

  • 关于通过Java连接mysql对反斜杠”\“转义的测试详解

    前言 在java中,反斜杠"\"转义是"\",因此表示一个"\"要使用"\\",如果是正则表达式,那么表示一个"\"需要用"\\\\",在mysql中,反斜杠转义依然是"\",和java相同. 现在问题是:如果mysql中一个字段的内容包含反斜杠,然后通过java连接mysql去筛选这个字段所在的条目,要怎么写才能将该字段筛选出来呢?下面就是一个实验: 1,先建立测试

  • MySQL里的反斜杠(\\)的使用

    目录 一.INSERT语句中有反斜杠(\) 1. 实际测试 2. 原理 二.SELECT查询反斜杠(\) 1. 实际测试 2. 原理 一.INSERT语句中有反斜杠(\) 1. 实际测试 咱们用下面这些SQL来测试一下反斜杠(\)在INSERT语句中会是啥样? INSERT INTO `demo0526` (`id`, `text`) VALUES (null, 'D:\陈哈哈\加班'); INSERT INTO `demo0526` (`id`, `text`) VALUES (null, '

  • python中的正斜杠与反斜杠实例验证

    目录 一.历史渊源 二.实例验证 三.总结 扩展:Python 基础篇-正斜杠("/")和反斜杠("\")的用法 一.历史渊源 UNIX操作系统:设计了使用 ‘/’ 的路径分割法 DOS系统:借鉴了UNIX的目录结构,但由于在DOS系统中,斜杠 ‘/’ 已经用来作为命令行参数的标志,因此只能使用反斜杠 ‘\’ Windows系统:很多时候已经没有命令行参数的干扰,因此正斜杠与反斜杠大多数情况下可以互换 二.实例验证 桌面新建临时Excel文件——test.xlsx,

  • PHP正则匹配反斜杠'\'和美元'$'的方法

    本文实例讲述了PHP正则匹配反斜杠'\'和美元'$'的方法.分享给大家供大家参考,具体如下: 1. test.php: <?php $content = '1111111<td>2222222<\/td>3$'; //'\\\\\/' 第1个'\'转义字符串的第2个'\',字符串为'\' //第3个'\'转义第4个'\',相当于字符串'\' //第5个'\'转义第4个'/',相当于字符串'/' //字符合起来为'\\/' 两个'\\' 正则表达式看做'\' $pattern

  • 老生常谈java路径中的反斜杠和斜杠的区别

    JAVA中的斜杠 有正斜杠与反斜杠之分,正斜杠,一般就叫做斜杠,符号为"/":反斜杠的符号为"\". 斜杠(/)在JAVA中没有什么特别的意义,就是代表一个字符'/'; 反斜杠(\)则不然,它和紧跟着它的那个字符构成转义字符,如"\n"(换行)."\""(字符'"')等,所以在字符串中要表示字符'\'要用"\\"来表示,例:如果你这样定义一个字符串String s = "nam

  • python中的反斜杠问题深入讲解

    前言 python本身使用 \ 来转义一些特殊字符,比如在字符串中加入引号的时候 s = 'i\'m superman' print(s) # i'm superman 为了防止和字符串本身的引号冲突,使用 \ 来转义,一般情况下这个也不会引起什么问题,但是当你要使用 \ 来转义 \ 的时候,就比较混乱了,比如我们想要输出一个 \ ,得写两个 \ ,否则会报语法错误,因为 \ 把后面的引号给转义了,必须使用 \ # 错误写法 # print '\' # 正确写法 print('\\') # \

  • php输出反斜杠的实例方法

    按常规写法,我们要输出反斜杠,那就在输出字符串里直接写上反斜杠的符号,但这样可以吗?我们尽管试一下. 运行这个代码的页面,发现页面报错了,报的是语法错误. 为什么会这样,从php文档里我们可以看到,这个反斜杠在字符串中是有特殊意义的,它其实是一个转义字符. 所以我们要输出这个反斜杠,就需要再加上一个反斜杠才行,第一个反斜杠是转义用的,第二个反斜杠才是真实的输出字符串. 再次运行上面的代码,可以看到没有报错了,而且能正确输出反斜杠字符了. 那如果要输出两个反斜杠字符呢?我们就需要写上四个反斜杠符号

  • 正则表达式中两个反斜杠的匹配规则详解

    关于正则表达式raw的\匹配规则 这是我在学习中获得到的一个例子,第一表达式中匹配到的是none.于是乎我就在思考,为什么会匹配不到,假设\t被转义成一个\t,那么也应该匹配到\tsanle,而不是none. 为了验证这个问题,我做了如下的实验: 那为什么一个会出现这样的结果呢,在正则表达式中,需要查找的字符串,会进行两次转义,先是传入的字符串进行第一层转换,例如:\\t --> \t .然后传到re解析器里进行第二层转换,\t -->tab键.而需要匹配的字符串\\\t -->两个反斜

  • php去掉json反斜杠的实例讲解

    1.通过"stripslashes($_POST['json']);"方法删除反斜杠. 2.通过"json_decode"对JSON格式的字符串进行解码即可. 通过AJAX传到PHP的json字符串有时候加上反斜杠"\"来转义,PHP处理时需要先去掉反斜杠,然后再json_decode. $str = stripslashes($_POST['json']);$arr = json_decode($str,true); stripslashes(

随机推荐