【问题标题】:regex in mySQL and MariaDB give different resultsmySQL 和 MariaDB 中的正则表达式给出不同的结果
【发布时间】:2021-03-12 11:10:08
【问题描述】:

我正在将我的 MariaDB 迁移到 MySQL,但遇到了一些差异。

我有一个非常简单的查询,它在 Maria DB 中产生结果 (197),但 mySQL 中的结果为零,谁能帮忙?

SELECT DISTINCT title FROM films where title REGEXP 'The \\w{4}[^\\s]*\\b'

数据库完全相同(从 MariaDB 导出到 MySQL 中没有问题)。

【问题讨论】:

  • 什么是 MySQL 版本?
  • 检查两个版本的 REGEXP 语法——它们可能不同。 MySQL 最近进行了不兼容的更改。
  • 谢谢大家,@WiktorStribiżew mySQL 是 5.7.32 - MySQL 社区服务器 (GPL) 协议版本:10 服务器字符集:cp1252 West European (latin1) 和 phpMyAdmin 是 Ver 4.9.5 我已经尝试了多种语法变体(转义/非转义等),但我似乎找不到在两者上都给出正确结果的组合。您知道我在哪里可以找到有关 MySQL 的“不兼容更改”的信息吗?

标签: mysql regex mariadb compatibility


【解决方案1】:

在 MySQL 5.7 中,您必须使用类似 POSIX 的正则表达式库并使用

SELECT DISTINCT title FROM films where title REGEXP 'The [[:alnum:]_]{4}[^[:space:]]*[[:>:]]'

另外,注意这里的正则匹配是不区分大小写的,如果你需要让The只匹配The而不匹配THE,你需要在REGEXP后面加上BINARY关键字。

这里,

  • [[:alnum:]_]{4} - \w{4} - 四字字符、字母、数字或下划线
  • [^[:space:]]* - \S* - 零个或多个非空白字符
  • [[:>:]] - \b(?!\w) - 右手(尾随)单词边界

【讨论】:

  • 谢谢@Wiktor Stribiżew 我已经在两个数据库上重新运行查询,结果现在匹配,坏消息是我将不得不重做所有正则表达式以适应 POSIX! !
  • 嗨 Wiktor,我确实投了赞成票,但我没有 15 个代表点,所以它不会显示 ;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
  • 2021-06-03
相关资源
最近更新 更多