错误代码:3685。正则表达式的非法参数

Zah*_*ain 7 mysql-8.0

我正在尝试使用以下 SQL 语句在 MySQL 8.0 中找到一个确切的数字

SELECT * FROM rulebook.node__body 
WHERE body_value REGEXP "[[:<:]]DVP[[:>:]]";
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

当我运行上述 SQL 语句时,出现以下错误

错误代码:3685。正则表达式的非法参数

你能请任何人告诉我我哪里出错了。

Leo*_*los 14

随着 MySQL 8.0 的采用增加和使用REGEXP开始中断的先前存储的 SQL 查询,这个问题可能会变得更加流行。

根据MySQL 8.0 Reference Manual / ... / Regular Expressions,“MySQL 使用 International Components for Unicode (ICU) 实现了正则表达式支持。”

根据MySQL 5.6 Reference Manual / ... / Regular Expressions,“MySQL 使用 Henry Spencer 的正则表达式实现。”

因此,由于您使用的是 MySQL 8.0,而不是使用[[:<:]][[:>:]],您现在可以使用\b. 您的查询可能如下所示:

SELECT *
  FROM `rulebook`.`node__body`
 WHERE `body_value` REGEXP "\\bDVP\\b"
     ;
Run Code Online (Sandbox Code Playgroud)

  • 这对我有用,但是在 php 中使用它时,我必须转义以 '\\\\bDVP\\\\b' 结尾的两个反斜杠中的每一个 (2认同)

Dio*_*ung -2

您的正则表达式包含无效的括号。假设您正在尝试查找body_value包含<andDVP和 的任何行>,您可以尝试:

SELECT * FROM rulebook.node__body 
WHERE body_value REGEXP '.*<.*DVP.*>.*';
Run Code Online (Sandbox Code Playgroud)

  • `[[:&lt;:]]` 和 `[[:&gt;:]]` 是 MySQL REGEXP 中的字边界。它们不应该是正在搜索的列中的文字字符(如您的解决方案中所建议的)。 (2认同)