Ala*_*blo 4 mysql select escaping backslash sql-like
我不明白这种MySQL的行为:如果我想显示一个\ b,我可以选择"a\\b"哪个工作没有问题:
mysql> select "a\\b";
+-----+
| a\b |
+-----+
| a\b |
+-----+
1 row in set (0.05 sec)
Run Code Online (Sandbox Code Playgroud)
但是,如果我想使用LIKE在表中搜索包含\的字符串,我需要双重转义我的"\".为什么?
这是一个例子.
我们准备一张小桌子.
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)
Run Code Online (Sandbox Code Playgroud)
我们尝试以"a\b"开头的条目......
mysql> select * from test where test LIKE "a\\b%";
+------+
| test |
+------+
| abcd |
+------+
1 row in set (0.05 sec)
Run Code Online (Sandbox Code Playgroud)
为什么\\在那里被忽略?为什么我需要双重逃避basckslash才能获得预期的结果?
mysql> select * from test where test LIKE "a\\\\b%";
+-------+
| test |
+-------+
| a\b |
| a\b\c |
+-------+
2 rows in set (0.04 sec)
Run Code Online (Sandbox Code Playgroud)
首先转义为字符串语法,然后转换为LIKE语法.
在LIKE字符%和_具有特殊含义,所以如果你想搜索文字%,你需要使用\%,如果你想搜索文字,\%你需要转义反斜杠\\%.
在字符串语法中"显然具有特殊含义,因此如果您想在字符串中包含引号,则需要将其转义为\",并且要\"在字符串中包含literal ,您必须转义反斜杠,如\\".
所以在两种语法中你都必须逃避\.
如果您不想使用\转义LIKE模式,则可以使用ESCAPE关键字.例如:
... where test LIKE "a\\b%" ESCAPE '|';
Run Code Online (Sandbox Code Playgroud)
通过这种方式,你需要写|%,|_或||逃避这些特殊字符.
| 归档时间: |
|
| 查看次数: |
6114 次 |
| 最近记录: |