在MySQL 中轉義反斜線:在WHERE 和LIKE 子句中使用
考慮以下查詢,該查詢搜尋包含反斜槓的標題:
(SELECT * FROM `titles` WHERE title = 'test\') UNION ALL (SELECT * FROM `titles` WHERE title LIKE 'test\\')
輸出顯示反斜線在WHERE 子句。但是,LIKE 子句需要額外的反斜線。
為什麼會有差別?
在 MySQL 中,反斜線 () 預設用作 LIKE 中的轉義字元。根據LIKE 的MySQL 手冊:
「因為MySQL 在字串中使用C 轉義語法...您必須將LIKE 字串中使用的任何'' 加倍。例如,要搜尋'n',請指定要搜尋'',請將其指定為'\';這是因為解析器會刪除一次反斜杠,並在進行模式匹配時再次刪除,只留下一個反斜杠進行匹配。
轉義反斜線
但是,MySQL 提供了使用ESCAPE 關鍵字變更轉義字元的功能。作為轉義字元:
SELECT * FROM `titles` WHERE title LIKE 'test\' ESCAPE '|'
使用此查詢,LIKE子句中只需要一個反斜杠,因為將使用管道字元為了逃跑。
以上是為什麼 MySQL 的 WHERE 和 LIKE 子句需要不同的反斜線轉義?的詳細內容。更多資訊請關注PHP中文網其他相關文章!