【发布时间】:2017-05-23 04:57:09
【问题描述】:
我正在处理一个我认为应该非常直观的查询,但不知何故我在实现它时遇到了一些问题。我想我想要实现的是匹配存储在 MySQL DB 中的字符串,没有空格和标点符号(其他创造性方法非常受欢迎)。同时,我希望查询以变音符号不敏感的方式处理 Unicode 字符(所以像 REGEXP 这样的选项有点不走运)。最后一个条件是我使用的是带有 InnoDB 引擎的 MySQL 5.5,因此不支持全文索引(但如果它有助于解决这个问题,我愿意升级到 5.6/5.7)。
考虑将字符串 Hello-World from John Doe 存储在 DB 中的场景。我想在给定搜索字符串 HelloWorld 或 JohnDoe 时找到它。更一般地说,DB 中的字符串可以包含括号、下存储和任何其他标点符号(不限于 ASCII,但现在可以妥协),而搜索字符串可以是单词的组合,中间有或没有任何分隔符。到目前为止,我得到的最接近的是菊花链 REPLACE 函数以获得已知标点符号列表,如下所示:
SELECT text FROM table WHERE REPLACE(REPLACE(text, '-', ''), ' ', '') LIKE '%JohnDoe%'
我的问题是:
- 有没有更好的方法来代替上面的菊花链?
- 如果这是唯一的解决方案,那么当我将数百个或更多 REPLACE 函数链接起来时,性能会受到怎样的影响?
提前感谢您的帮助。
【问题讨论】:
标签: mysql sql regex string innodb