mysql用regexp校验邮箱格式为'email regexp ^[a-za-z0-9._%+-]+@[a-za-z0-9.-]+.[a-za-z]{2,}$',postgresql用'~'操作符且反斜杠单写,sql server无原生正则需like或patindex凑合,但均需应用层二次校验并设varchar(254)。

MySQL中用REGEXP判断邮箱格式的常见写法
MySQL原生不校验邮箱语义,只靠正则做基础格式筛查。最常用的是:email REGEXP '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$'。这个表达式能覆盖绝大多数合法邮箱结构,但要注意它不验证域名是否存在、不检查长度上限(比如Gmail限制本地部分≤64字符)、也不识别IDN(国际化域名)。
PostgreSQL里~操作符比REGEXP更常用
PostgreSQL不用REGEXP函数,而是用~操作符配合POSIX正则语法:email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,}$'。注意两点:一是反斜杠不需要双写(MySQL要.,这里只需.);二是PostgreSQL默认区分大小写,如果字段可能含大写本地部分(如John@Example.COM),建议加i标志:email ~* '^[a-z0-9._%+-]+@[a-z0-9.-]+.[a-z]{2,}$'。
SQL Server没有REGEXP,得用PATINDEX或LIKE凑合
SQL Server 2017+虽支持STRING_SPLIT和TRANSLATE,但仍无原生正则。常用替代方案是:PATINDEX('%[A-Za-z0-9._%+-]%@%[A-Za-z0-9.-]%.%[A-Za-z]%', email) > 0——但这只能粗略判断是否含@和点,无法保证位置和结构。更靠谱的做法是结合多个LIKE条件:email LIKE '%_@__%.__%' AND email NOT LIKE '%[^A-Za-z0-9._%+-@]%' AND email LIKE '%@%.%',但依然漏判test..name@example.com这类非法重复点。
真正上线前必须绕开正则单独验域名和长度
正则再准也挡不住a@b.c这种技术上合法但实际无效的邮箱,更没法拦住超长字符串(如1000字符邮箱字段)。生产环境建议:先用SQL正则做初筛,再在应用层调用filter_var($email, FILTER_VALIDATE_EMAIL)(PHP)或email-validator库(Python/JS)做二次校验;数据库字段长度务必设为VARCHAR(254)(RFC 5321规定最大长度),避免截断。











