mysql-如何使用特殊字符/(正斜杠)和\(反斜杠)处理查询搜索

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

我有一个表,其中一列允许特殊字符,如“/”正斜杠和“\”反斜杠

现在,当我试图从表中搜索这些记录时,我无法获得这些记录

示例:abc\def或abc/def 我正在生成搜索查询,如下所示

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');函数。