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


Searching MySQL for data that contains backslashes

在数据库中,我在一个名为Description的字段中存储了一些文本,保存在数据库中的字符串的值是Me'You "R'S'" %,这就是它在查询数据库命令行时的显示方式。

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

WHERE描述LIKE"%$searchstring%"

因此,当清理了$searchstring后,如果我在搜索Me'You,反斜杠将得到转义,我的查询将读取:

WHERE描述如"%Me''''You%"

然而,它没有返回任何内容。

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

查询结果命令行时,不会返回以下项的结果:

WHERE描述如"%Me''You%"

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

然而,如果我使用4-7个反斜杠,它将返回结果,例如:

WHERE描述如"%Me ''''''''You%"

将返回Me'You "R'S'" % 字符串

有人知道发生这种事的原因吗?感谢

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

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

阅读此需要在MySQL中只选择包含反斜杠的数据,以了解如何使用双反斜杠转义。您也可以在NO_BACKSLASH_ESCAPES模式下运行MySQL(http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_no_backslash_escapes)

尽管这是一篇旧文章,但您可以使用replace函数将反斜杠更改为另一个字符来绕过此限制:类似于WHERE子句中的内容。示例:WHERE替换('your field here','''','-'),如"You Me%"