java - 使用 MySQL 转义 REGEXP 中的字符串文字

标签 java mysql mariadb

这里有一个棘手的问题。

假设我有表“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 不属于 future 可能想要对功能收费的大公司
  • MariaDB 带来了许多增强功能,包括更多 REGEXP 功能,例如您想要的功能和 REGEXP_REPLACE,以及​​其他改进。

此列表并不详尽。

关于java - 使用 MySQL 转义 REGEXP 中的字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30076615/

相关文章:

mysql - 如何在mysql中找到组的总和并找到权重?

java - 如何使用原始 SQL 在 jOOQ 中进行批量插入?

php - 简单的查找和替换脚本 PHP/MySQL

Java - 在 OpenCV 中读取帧

mysql - 条件 SQL SELECT - 当返回集为空时,执行另一个 SELECT?

mysql - 如何在一个 INSERT 上获取多行的插入 ID?

mysql - MariaDB 按日期排序并限制偏移量和缺失结果

java - MariaDB Java 响应式(Reactive)客户端

java - 多个列表之间的公共(public)元素

java - 如何在另一个 Activity 中调用此方法?