在MySQL中搜索包含反斜杠的数据

时间:2012-02-14 12:09:40

标签: php mysql

在数据库中,我有一些文本存储在字段调用说明中,保存在我的数据库中的字符串的值是Me\You "R'S'" %,这就是它在查询数据库命令行时的显示方式。

现在,在网页上我有一个搜索此字段的功能:

  

WHERE描述LIKE'%$ searchstring%'

所以当$ searchstring被清理后,如果我正在搜索Me\You,则反斜杠会被转义,我的查询会显示:

  

WHERE描述LIKE'%Me \\ You%'

然而,它不会返回任何内容。

奇怪的是,当我搜索Me \\ You或Me \\\ You(所以两个或三个反斜杠,但不会少或不多)时,它将返回我期望的结果,只有一个反斜杠。

查询结果命令行时,它不会返回结果:

  

WHERE描述LIKE'%Me \ You%'

或当我使用两个或三个反斜杠时。

但是如果我使用4 - 7反斜杠,它将返回结果,例如:

  

WHERE描述LIKE'%Me \\\\\\\ You%'

将返回Me\You "R'S'" %

的字符串

任何人都有理由这样做吗?感谢

3 个答案:

答案 0 :(得分:2)

  

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

来源:http://dev.mysql.com/doc/refman/5.1/en/string-comparison-functions.html#operator_like

答案 1 :(得分:0)

阅读此Need to select only data that contains backslashes in MySQL以了解如何使用双反斜杠转义。您也可以在NO_BACKSLASH_ESCAPES模式(http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_backslash_escapes

中运行MySQL

答案 2 :(得分:-3)

虽然是一篇旧文章,但您可以使用替换函数绕过此限制,以将反斜杠更改为另一个字符:WHERE子句中的此类内容。例: WHERE替换('你的领域','\',' - '),如“You-Me%”