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

JAV*_*VAC 7 mysql plsql

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

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

例如: abc\def或abc/def我正在生成类似的搜索查询

select * from table1_1 where column10 like '%abc\def%'
Run Code Online (Sandbox Code Playgroud)

它返回0行,但实际上存在1个记录.在这种情况下如何编写查询,请告诉我.

谢谢.

xch*_*onx 15

巴马尔部分正确(所以+1),

所以诀窍是双重逃避只有反斜杠,因为字符串转义只需要一个转义.

例如

  • 单引号'只需要转义一次LIKE '%\'%'
  • 但要查询反斜杠,\您需要双重转义LIKE '%\\\\%'
  • 如果您想查询反斜杠+ singlequote \'然后LIKE '%\\\\\'%'(5个反斜杠)

解释来源 摘录:

因为MySQL在字符串中使用C转义语法(例如,"\n"表示换行符),所以必须将在LIKE字符串中使用的任何"\"加倍.例如,要搜索"\n",请将其指定为"\n".要搜索"\",请将其指定为"\\"; 这是因为反斜杠被解析器剥离一次,并且在进行模式匹配时再次剥离,留下一个反斜杠来匹配.

  • 这并不能解释为什么需要四个斜杠。从逻辑上讲,双转义意味着两个斜杠,加上一个实际内容的斜杠,这样我们就得到了“\\\”,而不是“\\\\”。根据 Barmar 的答案,第四个“\”似乎是由于使用了“LIKE”子句,但该答案缺少该信息。 (3认同)

Bar*_*mar 11

在MySQL中,这适用于:

select * from Table1
where column10 like '%abc\\\\def%'
Run Code Online (Sandbox Code Playgroud)

小提琴

反斜杠是字符串和LIKE模式的转义前缀.因此,您需要将其加倍一次LIKE,并再次使用字符串文字语法.