簡體   English   中英

mysql - 如何使用特殊字符 /(正斜杠)和 \\(反斜杠)處理查詢搜索

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM