我不明白这个 MySQL 行为:如果我想显示 a\b,我可以只选择 "a\\b"
没有问题:
mysql> select "a\\b";
+-----+
| a\b |
+-----+
| a\b |
+-----+
1 row in set (0.05 sec)
但是如果我想使用 LIKE 在表中搜索包含\的字符串,我需要对“\”进行两次转义。为什么?
这是一个例子。
我们准备了一张小 table 。
create table test ( test varchar(255) );
insert into test values ( "a\\b" ) , ( "a\\b\\c" ) , ( "abcd" );
mysql> select * from test;
+-------+
| test |
+-------+
| a\b |
| a\b\c |
| 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)
为什么 \\
在那里被忽略了?为什么我需要两次转义 basckslash 以获得预期结果?
mysql> select * from test where test LIKE "a\\\\b%";
+-------+
| test |
+-------+
| a\b |
| a\b\c |
+-------+
2 rows in set (0.04 sec)
最佳答案
首先对字符串语法进行转义,然后对 LIKE
语法进行转义。
在 LIKE
中,字符 %
和 _
有特殊含义,所以如果你想搜索文字 %
,你需要使用 \%
,如果你想搜索文字 \%
你需要像 \\%
一样转义反斜杠.
在字符串语法中 "
显然有特殊的含义,所以如果你想在字符串中包含引号,你需要将它转义为 \"
,并包含文字 \"
在字符串中,您必须像在 \\"
中那样转义反斜杠。
所以在这两种语法中你都必须转义\
。
如果你不想使用 \
来转义 LIKE 模式,你可以使用 ESCAPE 关键字。例如:
... where test LIKE "a\\b%" ESCAPE '|';
这样,您需要编写 |%
、|_
或 ||
来转义这些特殊字符。
关于mysql - 为什么我需要双重转义(使用 4\)来查找纯 SQL 中的反斜杠(\)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13414791/