2012-02-14 38 views
0

在數據庫中,我已經存儲在現場call說明一些文字,保存在我的數據庫中的字符串的值是Me\You "R'S'" %和多數民衆查詢數據庫命令行時它如何出現。搜索MySQL的數據包含反斜槓

現在,在網頁上我有搜索這個領域作爲這樣的功能:

WHERE說明LIKE '%$搜索字符串%'

所以當$搜索字符串已被清理,如果我在尋找Me\You,反斜線得到逃避和我的查詢內容如下:

WHERE說明LIKE「%我\\您%」

但是它不返回任何東西。這個奇怪的部分是,當我搜索我\你或我\你(所以兩個或三個反斜槓,但不多或不多),它會返回我期望的結果與一個反斜槓。

當查詢結果的命令行,它不返回結果:

WHERE說明LIKE「%我\您%」

或當我使用兩個或三個反斜槓。

然而,得到的結果是,如果我用4 - 7個反斜槓,例如:

WHERE說明LIKE '%我\\\\\\\您%'

會返回的是Me\You "R'S'" %

任何人有理由這種情況發生的字符串?由於

回答

2

注意
因爲MySQL使用C轉義語法的字符串(例如,「\n」來表示一個換行符),則必須增加一倍,你在LIKE字符串中使用任何「\」。例如,要搜索「\n」,請將其指定爲「\\n」。要搜索「\」,請將其指定爲「\\\\」;這是因爲反斜槓被解析器剝離了一次,並且當匹配模式匹配時,反斜槓被匹配。

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

-3

儘管是舊帖子,但您可以繞過此限制使用替換函數將反斜槓更改爲另一個字符:在WHERE子句中就像這樣。實例: WHERE替換( '你在這裏領域', '\', ' - '),如 「你-ME%」

+0

可以請你解釋一下? – SKJ 2013-11-07 23:24:14

+0

@ user2966910這在文本字段中並不真正可持續,該文本字段可以自由地允許任何字符,就像用戶輸入一個'-'(在這種情況下)它會以斜槓形式返回。 – Ryan 2013-11-08 11:45:36

+0

您也失去了通過這種方式獲得列索引所帶來的任何性能優勢。 – 2014-05-12 17:23:29