[英]mysql - How to handle query search with special characters /(forward slash) and \(backslash)
我有一個表,其中一列允許特殊字符,如 '/' 正斜杠和 '\\' 反斜杠。
現在,當我嘗試從表中搜索此類記錄時,我無法獲得這些記錄。
示例: abc\\def 或 abc/def 我正在生成類似於
select * from table1_1 where column10 like '%abc\def%'
它返回 0 行,但實際上存在 1 條記錄。 在這種情況下如何編寫查詢,請告訴我。
謝謝。
Barmar 部分正確(所以 +1),
所以訣竅是只對反斜杠進行雙重轉義,對於字符串轉義,只需要一次轉義。
例如
'
只需要轉義一次LIKE '%\\'%'
\\
你需要雙重轉義到LIKE '%\\\\\\\\%'
\\'
那么LIKE '%\\\\\\\\\\'%'
(有 5 個反斜杠)解釋來源摘錄:
由於 MySQL 在字符串中使用 C 轉義語法(例如,“\\n”表示換行符),因此您必須將 LIKE 字符串中使用的任何“\\”加倍。 例如,要搜索“\\n”,請將其指定為“\\n”。 要搜索“\\”,請將其指定為“\\\\”; 這是因為反斜杠被解析器剝離一次,並在進行模式匹配時再次剝離,留下一個反斜杠進行匹配。
在 MySQL 中,這有效:
select * from Table1
where column10 like '%abc\\\\def%'
反斜杠是字符串和LIKE
模式的轉義前綴。 因此,您需要為LIKE
將其加倍,對於字符串文字語法,您需要將其加倍。
你必須逃離\\
另一個\\
select * from table1_1 where column10 like '%abc\\def%'
當我在 MySQL v5.5 上嘗試時,轉義LIKE
值不起作用。 經過幾次嘗試,什么起作用的是正則表達式(我也不得不在那里轉義,並將其隱藏在字符類中)。 我終於讓它像這樣工作:
select * from table1_1 where column10 rlike 'abc[\\]def'
這些沒有用:
... column10 like '%abc\\def%'
... column10 like concat('%abc', char(92), 'def%')
... column10 rlike 'abc\\def'
請注意,您還將此標記為 PL/SQL,即 Oracle。 您發布的查詢在 Oracle 上按原樣運行。 PL/SQL 標簽是錯誤的嗎?
使用轉義。
https://dev.mysql.com/doc/refman/5.0/en/string-literals.html
表 9.1。 特殊字符轉義序列
由序列表示的轉義序列字符 \\0 一個 ASCII NUL (0x00) 字符。
\\' 單引號(“'”)字符。
\\" 雙引號 (""") 字符。
\\b 退格字符。
\\n 換行(換行)字符。
\\r 回車符。
\\t 制表符。
\\Z ASCII 26 (Control+Z)。 請參閱表格后面的注釋。
\\ 一個反斜杠(“\\”)字符。
\\% 一個角色。 請參閱表格后面的注釋。
_ 一個角色。 請參閱表格后面的注釋。
如果您使用 PHP sprintf()將您的查詢放在您想要的位置:
AND column10 LIKE '%/%'
這在 sprintf() 中對我有用:
AND column10 LIKE '%%/%%'
(MySQL 8 - WAMP)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.