在数据库中,我有一些文本存储在字段调用说明中,保存在我的数据库中的字符串的值是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'" %
任何人都有理由这样做吗?感谢
答案 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%”