簡體   English   中英

使用MySQL在REGEXP中轉義字符串文字

[英]Escaping String literals in REGEXP with MySQL

這里有一個棘手的問題。

可以說我有表“ books”,其中有“ title”列。 我有一排帶有'title'='MyBook'的行。

我想使用REGEXP搜索書名,並且想將所有可搜索的字符串都引用為文字序列:

SELECT * FROM books WHERE title REGEXP '\\QMyBook\\E';

當我使用mariaDB時,我的查詢工作正常。 DB會識別此引號。 但是,當我使用純MySql時,此查詢不返回任何內容。 問題不在於反斜杠,我認為MySql在使用“ \\ Q”和“ \\ E”時遇到麻煩。 也許有一種方法可以實現我的目標,但是我真的不想分開逃避每個角色。

我從Java執行此查詢。 但是從控制台進行普通查詢的方式相同

問題是-由於某些原因,確實有必要使用REGEXP(而不是LIKE)運算符。

但是我不希望帶有正則表達式特殊字符(例如“ My.ook”)的查詢在這里起作用。 我需要任何帶有或不帶有正則表達式特殊符號的字符串,都由mysql作為原義序列處理(如果我們傳遞“點”,我們正在尋找“點”,而不是“任何字符”)

我認為普通的MySQL無法做到這一點,但是如果您升級到MariaDB,則可以使用所需的語法。

請參閱MariaDB的文檔以獲取更多信息: https : //mariadb.com/kb/en/mariadb/pcre/#quoting

SELECT * FROM books WHERE title REGEXP '\\QMyBook\\E';

我建議切換到MariaDB的原因如下:

  • 過去在MySQL中可用的所有內容均可在MariaDB中運行
  • 您可以從任何客戶端連接到MariaDB,而無需更改MySQL配置(這是MySQL的直接替代品)
  • MariaDB並非由大型公司所有,后者可能希望將來對功能收費
  • MariaDB具有許多增強功能,包括許多REGEXP功能,例如您想要的功能和REGEXP_REPLACE,以及​​其他改進。

此列表並不詳盡。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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