首頁  >  文章  >  後端開發  >  為什麼我需要在 MySQL 的 WHERE 和 LIKE 子句中以不同的方式轉義斜線?

為什麼我需要在 MySQL 的 WHERE 和 LIKE 子句中以不同的方式轉義斜線?

Barbara Streisand
Barbara Streisand原創
2024-11-01 20:10:02343瀏覽

Why Do I Need to Escape Slashes Differently in MySQL's WHERE and LIKE Clauses?

為什麼 MySQL 的 WHERE 和 LIKE 子句要以不同的方式轉義斜線 ()?

在 MySQL 中,在查詢中處理斜線 () 可以令人困惑。考慮以下查詢:

<code class="sql">(SELECT * FROM `titles` where title = 'test\')
UNION ALL
(SELECT * FROM `titles` where title LIKE 'test\\')</code>

您可能會期望使用 LIKE 子句的第二個查詢需要額外的反斜線來轉義「test」中的原始斜線。然而,結果顯示,兩個查詢都成功傳回同一行,標題為「test」。

出現差異的原因是 MySQL 在 WHERE 和 LIKE 子句中使用轉義字元的行為。在 WHERE 子句中,反斜線用作轉義字符,保護特殊字符不被字面解釋。相反,在 LIKE 子句中,反斜線是預設的轉義字符,可讓您轉義搜尋模式中的其他字符。

如MySQL 手冊中有關LIKE 的所述:

;「因為MySQL 在字串中使用C 轉義語法...您必須將LIKE 字串中使用的任何”加倍。例如,要搜尋“n”,請將其指定為“\n”。 」

因此,雖然「test」中的反斜線在解析WHERE 子句時會自動轉義,但必須明確加倍(為「test\」)以使LIKE 子句符合預期的轉義序列。 >

透過將反斜線替換為管道字符作為轉義字符,您可以準確搜尋字面量“test”,而無需加倍反斜線。

以上是為什麼我需要在 MySQL 的 WHERE 和 LIKE 子句中以不同的方式轉義斜線?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn