MySQL regexp_replace执行卡顿超时问题求助
解决MySQL REGEXP_REPLACE卡顿超时的问题
首先,我注意到你写的语句里用了mysql.regexp_replace,这很可能是问题的根源——MySQL的REGEXP_REPLACE是全局内置函数,不需要加mysql.前缀。错误的前缀会让MySQL无法正确识别函数,进而导致解析异常,出现无响应超时的情况。
接下来分两种情况给你解决方案:
情况1:你的MySQL版本是8.0及以上(支持REGEXP_REPLACE)
直接去掉多余的前缀,使用正确的函数调用方式:
- 测试语句改为:
SELECT REGEXP_REPLACE('qwerty', '.', '*') FROM dual; - 操作表的语句改为:
SELECT REGEXP_REPLACE(varchar_column, '.', '*') FROM varchar_table;
情况2:你的MySQL版本低于8.0(无REGEXP_REPLACE函数)
低版本MySQL没有内置的正则替换函数,而且就算有,用正则替换每个字符也不是最高效的方式。推荐用更简单高效的方法:利用REPEAT和CHAR_LENGTH生成对应长度的星号,完全能达到你想要的效果:
- 测试语句:
SELECT REPEAT('*', CHAR_LENGTH('qwerty')) FROM dual; - 操作表的语句(处理NULL值的话加IFNULL):
SELECT IFNULL(REPEAT('*', CHAR_LENGTH(varchar_column)), '') FROM varchar_table;
额外说明
为什么推荐用REPEAT而非正则?因为正则替换需要逐个匹配每个字符,对于大表来说性能开销很大,而REPEAT直接根据字符串长度生成对应星号,执行效率要高得多,也避免了正则引擎可能带来的异常问题。
内容的提问来源于stack exchange,提问作者Denis
相关产品推荐
相关产品推荐

