mysql-如何使用特殊字符/(正斜杠)和\(反斜杠)处理查询搜索
我有一个表,其中一列允许特殊字符,如“/”正斜杠和“\”反斜杠 现在,当我试图从表中搜索这些记录时,我无法获得这些记录 示例:abc\def或abc/def 我正在生成搜索查询,如下所示mysql-如何使用特殊字符/(正斜杠)和\(反斜杠)处理查询搜索,mysql,plsql,Mysql,Plsql,我有一个表,其中一列允许特殊字符,如“/”正斜杠和“\”反斜杠 现在,当我试图从表中搜索这些记录时,我无法获得这些记录 示例:abc\def或abc/def 我正在生成搜索查询,如下所示 select * from table1_1 where column10 like '%abc\def%' 它返回0行,但实际上存在1条记录。在这种情况下如何编写查询,请告诉我 谢谢。你必须用另一个\来逃离\ select * from table1_1 where column10 like '%abc
select * from table1_1 where column10 like '%abc\def%'
它返回0行,但实际上存在1条记录。在这种情况下如何编写查询,请告诉我
谢谢。你必须用另一个
\
来逃离\
select * from table1_1 where column10 like '%abc\\def%'
使用转义
表9.1。特殊字符转义序列
由序列表示的转义序列字符
\0一个ASCII NUL(0x00)字符
\'一个单引号(“”)字符
\双引号(“”)字符
\b退格字符
\n换行符(换行符)字符
\r是回车符
\不是制表符
\Z ASCII 26(控制+Z)。见下表注释
\反斜杠(\)字符
\%“%”字符。见下表注释
_一个“u”字符。请参阅下表的注释。在MySQL v5.5上尝试时,对
LIKE
值进行转义无效。经过几次尝试,成功的是一个正则表达式(我也必须在那里逃逸,并将其隐藏在字符类中)。我终于让它像这样工作:
select * from table1_1 where column10 rlike 'abc[\\]def'
这些都不起作用:
... column10 like '%abc\\def%'
... column10 like concat('%abc', char(92), 'def%')
... column10 rlike 'abc\\def'
注意,您还将其标记为PL/SQL,即Oracle。您发布的查询与Oracle上的查询一样有效。PL/SQL标记是错误的吗?在MySQL中,这是有效的:
select * from Table1
where column10 like '%abc\\\\def%'
反斜杠是字符串和
LIKE
模式的转义前缀。因此,对于像这样的,您需要将其加倍一次,对于字符串文字语法,需要将其加倍一次。Barmar部分正确(So+1)
所以诀窍是只对反斜杠进行两次转义,因为字符串转义只需要一次转义
比如说
- 单引号
“
只需转义一次,如“%\%”
- 但要查询反斜杠
\
,您需要双重转义到,如“%\\\\%”
- 如果您想查询反斜杠+单引号
\'
,那么就像“%\\'%”
(有5个反斜杠)
摘录:
因为MySQL在字符串中使用C转义语法(例如,“\n”来
表示换行符),必须将使用的任何“\”加倍
一丝不苟。例如,要搜索“\n”,请将其指定为“\n”。
要搜索“\”,请将其指定为“\”;这是因为
反斜杠由解析器剥离一次,当模式
进行匹配,留下一个反斜杠进行匹配
如果使用PHPsprintf()将查询放在您想要的位置:
和类似“%/%”的列10
这在sprintf()中对我有效:
和类似“%%/%%”的列10
(mysql8-WAMP)PL/SQL是Oracle的过程语言(与SQL不同)。。。MySQL是一个完全不同的RDBMS。。。你是在使用Oracle还是MySQL?+1并感谢@Barmar——感谢我为我的答案所做的一切,我从未想到过。比我想到的要干净得多。实际上,我通过不断添加unl直到查询成功,使它在很长一段时间内都能正常工作。。这个解释是我需要的,所以+1和我的答案正斜杠有什么想法吗??在插入查询中。我的文本是somex/Somey。这总是给我错误。你可以使用$newtext=addslashes('somex/Somey');函数。