You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何MySQL 8.0 CHECK约束中等价正则表达式校验失败?

问题根因

这是MySQL 8.0早期版本的已知bug,和你写的正则逻辑对错没有关系:

  • 首先可以确定:^1*$和^1{0,}$在标准正则语义、MySQL普通SELECT查询的REGEXP匹配逻辑里是完全等价的,你单独执行查询返回匹配成功的结果是完全正确的。
  • 本地部署实例和在线测试环境运行结果不一致,核心原因是两者的MySQL小版本不同:
    • 在线测试环境用的是8.0.25及之后的修复版本,这类正则解析bug已经被官方处理完成
    • 你自己部署的实例属于8.0.16到8.0.24之间的早期8.0版本:这个版本段的MySQL在处理CHECK约束里的正则时,没法正确识别{m,n}格式的重复量词,会错误把符合规则的值判定为违反约束,和正则实际的匹配逻辑没有关联。
  • 你可以直接在本地实例执行select version();查看版本号,只要落在上述区间,就能完全对应上这个问题。
解决方案
  • 临时绕过:写CHECK约束的时候,暂时用*、+这类简写量词代替{0,}、{1,}这类花括号写法的等量词,就不会触发这个解析bug。
  • 彻底解决:把本地的MySQL 8.0升级到8.0.25及之后的正式稳定版,官方在8.0.25的更新日志里明确标注修复了CHECK约束中正则花括号量词解析错误的问题。

内容的提问来源于stack exchange,提问作者klapeyron

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 12:54:18