使用MySQL

时间:2015-05-06 12:22:05

标签: java mysql mariadb

这里有一个棘手的问题。

假设我有表'书',其中有'标题'栏目。我有一行'title'='MyBook'。

我想使用REGEXP搜索书名,我想将所有可搜索的字符串引用到文字序列:

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

当我使用mariaDB时,我的查询工作正常。 DB识别此引号。但是当我使用普通的MySql时,这个查询什么都不返回。问题不在反斜杠中,我认为MySql在使用“\ Q”和“\ E”时遇到麻烦。也许有办法以其他方式实现我的目标,但我真的不想分别逃避每一个角色。

我从java执行此查询。但是来自控制台的简单查询以相同的方式工作

问题是 - 由于某些原因,确实需要使用REGEXP(不是LIKE)运算符。

但我不希望这个带有regexp特殊字符的查询(例如'My.ook')在这里工作。我需要任何字符串,有或没有正则表达式特殊符号,由mysql作为文字序列处理(如果我们传递'点' - 我们正在寻找'点',而不是'任何字符')

1 个答案:

答案 0 :(得分:-2)

我不认为这可以通过普通的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,以及​​其他改进。

此列表并非详尽无遗。