首页/开发/正则与编码速查/MySQL 正则匹配的语法范围

MySQL 正则匹配的语法范围

MySQL 正则运算符是部分匹配语义,整串校验必须自行加锚点;语法范围随版本变化,较新版本更换引擎后支持面扩大。大小写敏感性由字段排序规则决定,正则条件通常无法使用索引,大数据表上应先缩小候选集再筛选。

正则与编码速查开发更新于 2026-10-17
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌‌​​‌​‌‌‌​​‌‌​‌‌‌​​​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

MySQL 正则匹配的语法范围

MySQL 提供正则运算符用于条件判断,语义是部分匹配:只要字段值中包含符合模式的内容就为真,不需要整串相符。语法范围与版本密切相关,较新版本换用了新的正则引擎,支持面明显扩大;更早版本的实现接近扩展正则的子集,简写字符类等写法不可用。写跨版本都能跑的语句前,先确认实际版本。

基本信息

运算符形式两种写法等价,可作为条件表达式的一部分使用
匹配语义部分匹配,含子串即真,整串相符需要自行加锚点
版本影响较新版本更换引擎后语法与 Unicode 支持范围改变
比较规则大小写敏感性与字符集由字段的排序规则决定,可用字节比较强制区分

典型使用场景

  • 数据质量巡检:找出格式不符合约定的记录,例如电话与编码字段
  • 临时排查:在运维查询中快速筛选形如某模式的记录
  • 规则校验:与约束配合,在写入前做一次形状检查
  • 报表口径核对:对比两套系统中同类字段的格式差异
  • 迁移前评估:统计待迁移数据中不符合目标格式的比例

查询写法与边界

查询写法与边界
-- 部分匹配:只要包含数字即命中
SELECT id FROM users WHERE phone REGEXP '[0-9]';
-- 整串匹配:两端加锚点,否则前缀后缀任意内容都会通过
SELECT id FROM users WHERE phone REGEXP '^[0-9]{11}$';
-- 排序规则影响大小写:不区分大小写的列默认会忽略大小写
SELECT 'Abc' REGEXP 'abc' AS ci_result;      -- 结果取决于排序规则
SELECT BINARY 'Abc' REGEXP BINARY 'abc';     -- 强制字节比较,区分大小写
-- NULL 参与运算时结果为 NULL,需要显式处理
SELECT id FROM users WHERE phone IS NOT NULL AND phone REGEXP '^1';
-- 字符串字面量还有一层转义:反斜杠要写两次
SELECT 'a1' REGEXP '[0-9]' AS ok;

语义与限制

项目说明注意
匹配范围字段值任意位置整串校验必须加锚点
大小写由排序规则决定换用字节比较可强制区分
简写字符类视版本而定跨版本脚本改用显式区间
索引使用普通索引难以命中先用其他条件缩小候选集
空值结果为 NULL条件里要显式排除空值
正则条件通常无法使用普通索引,大数据表上把它放在过滤条件的第一位会退化成全表扫描;实践上先用等值与范围条件缩小候选集,再用正则做最终筛选。
层级转义是这里的常见错误来源:语句里的字符串字面量会解释一次反斜杠,正则引擎再解释一次,涉及简写字符类时需要用双反斜杠表达,涉及具体行为时以目标版本文档为准。

易错点

  • 当作整串匹配使用:只要字段里含有符合模式的片段就通过,校验形同虚设
  • 跨版本使用简写字符类:旧版本实现不支持,语句要么报错要么匹配结果与预期不符
  • 忽略排序规则:大小写敏感性由字段定义为决定,同一语句在不同列上结果不同
  • 在大表上用正则做主要过滤:无法命中索引,扫描代价随数据量线性增长
  • 遗漏空值处理:空值参与比较得到未知结果,既不命中也不出错,统计口径出现偏差

数据来源与参考

  • MySQL 官方手册:正则表达式运算符(REGEXP、RLIKE)
  • MySQL 官方手册:字符集与排序规则对比较的影响
  • MySQL 8.0 变更说明:正则表达式引擎的更换

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/regex/mysql-regexp-basics.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​​‌​‌‌‌‌​‌‌​‌‌​‌​‌‌‌‌​​‌​‌‌‌​​‌‌​‌‌‌​​​‌​‌‌​‌‌​​​​‌​‌‌​‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌​​‌‌‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌‌​​​​​​‌​‌‌​‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​​‌‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​