为什么我需要双转义(使用 4 )才能在纯 SQL 中找到反斜杠 ( )



我不理解这种MySQL行为:如果我想显示a\b,我可以选择"a\b"没有问题的工作:

mysql> select "a\b";
+-----+
| ab |
+-----+
| ab |
+-----+
1 row in set (0.05 sec)

但是,如果我想使用 LIKE 在表中搜索包含 \ 的字符串,我需要对我的"\"进行双重转义。为什么?

下面是一个示例。

我们准备了一张小桌子。

create table test ( test varchar(255) );
insert into test values ( "a\b" ) , ( "a\b\c" ) , ( "abcd" );
mysql> select * from test;
+-------+
| test  |
+-------+
| ab   |
| abc |
| abcd  |
+-------+
3 rows in set (0.05 sec)

我们尝试获取以"a\b"开头的条目...

mysql> select * from test where test LIKE "a\b%";
+------+
| test |
+------+
| abcd |
+------+
1 row in set (0.05 sec)

为什么\在那里被忽略了?为什么我需要双转义巴斯克斜杠才能获得预期的结果?

mysql> select * from test where test LIKE "a\\b%";
+-------+
| test  |
+-------+
| ab   |
| abc |
+-------+
2 rows in set (0.04 sec)

首先针对字符串语法进行转义,然后针对LIKE语法进行转义。

LIKE字符中,%_具有特殊含义,因此如果要搜索文字%,则需要使用%,如果要搜索文字%则需要像\%一样转义反斜杠。

在字符串语法中"显然具有特殊含义,因此如果要在字符串中包含引号,则需要将其转义为",并且要在字符串中包含文字",则必须像\"一样转义反斜杠。

因此,在这两种语法中,您都必须转义


如果不想用来转义 LIKE 模式,可以使用 ESCAPE 关键字。例如:

...  where test LIKE "a\b%" ESCAPE '|';

这样,您需要编写|%|_||来转义这些特殊字符。

请参阅字符串比较函数

like运算符与模式进行比较,其中可能包括%_。要转义这些,您必须使用 .所以反斜杠也是一个特殊的字符。

当您输入模式字符串时"a\\b"它由Mysql解释,然后由like运算符再次解释,wich给出"a\b"然后"ab"

最新更新