以下是MySQL中所有支持的SQL Mode及其说明,综合了多个来源的信息并进行了分类整理:
一、严格模式相关
STRICT_TRANS_TABLES
- 对事务型存储引擎(如InnoDB)启用严格数据校验。若插入非法值(如类型不符、超出范围等),语句会被中止。对于非事务表,仅当首行数据非法时中止语句。
STRICT_ALL_TABLES
- 对所有存储引擎启用严格模式。与
STRICT_TRANS_TABLES
的区别在于:对于多行插入的非事务表,即使后续行数据非法,也会中止整个操作(而非仅跳过非法行)。
- 对所有存储引擎启用严格模式。与
TRADITIONAL
- 组合模式,等同于
STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
。行为类似传统SQL数据库,对非法数据直接报错而非警告。
- 组合模式,等同于
二、日期与零值控制
NO_ZERO_IN_DATE
- 禁止年月日中部分为零的日期(如
2025-00-01
),但允许0000-00-00
。需与严格模式配合生效。
- 禁止年月日中部分为零的日期(如
NO_ZERO_DATE
- 禁止
0000-00-00
作为有效日期。若启用严格模式,插入该值会报错。
- 禁止
ALLOW_INVALID_DATES
- 宽松日期校验,仅检查月份(1-12)和日(1-31),不验证实际有效性(如允许
2025-02-30
)。不适用于TIMESTAMP列。
- 宽松日期校验,仅检查月份(1-12)和日(1-31),不验证实际有效性(如允许
三、数学运算与类型处理
ERROR_FOR_DIVISION_BY_ZERO
- 除零或模零操作在严格模式下报错(否则返回NULL并警告)。注意:该模式在MySQL 8.0中已标记为弃用,其功能将合并到严格模式。
NO_UNSIGNED_SUBTRACTION
- 允许无符号整数减法结果为负数(默认会溢出报错)。
REAL_AS_FLOAT
- 将
REAL
类型视为FLOAT
(默认视为DOUBLE
)。
- 将
四、语法与标识符规则
ANSI_QUOTES
- 双引号
"
视为标识符引用符(如列名),而非字符串引号。需改用单引号定义字符串。
- 双引号
IGNORE_SPACE
- 允许函数名与括号间有空格(如
COUNT (1)
),但会导致函数名成为保留字需转义。
- 允许函数名与括号间有空格(如
PIPES_AS_CONCAT
- 将
||
视为字符串连接符(标准SQL行为),而非逻辑OR。
- 将
HIGH_NOT_PRECEDENCE
- 提高
NOT
运算符优先级(如NOT a BETWEEN b AND c
解析为(NOT a) BETWEEN b AND c
)。
- 提高
五、GROUP BY与聚合控制
- ONLY_FULL_GROUP_BY
- 严格校验GROUP BY查询,SELECT中的非聚合列必须在GROUP BY子句中出现或函数依赖。
六、引擎与存储相关
NO_ENGINE_SUBSTITUTION
- 若创建表时指定不可用的存储引擎(如未编译的引擎),直接报错而非替换为默认引擎。
NO_DIR_IN_CREATE
- 忽略建表语句中的
INDEX DIRECTORY
和DATA DIRECTORY
指令(常用于主从复制环境)。
- 忽略建表语句中的
七、其他特殊模式
NO_AUTO_VALUE_ON_ZERO
- 禁止
0
作为自增列的下一个值(仅NULL
触发自增)。
- 禁止
NO_BACKSLASH_ESCAPES
- 禁用反斜杠
\
作为转义符(如\n
视为普通字符)。
- 禁用反斜杠
PAD_CHAR_TO_FULL_LENGTH
- 检索CHAR类型时保留右端空格(默认自动修剪)。
八、组合模式(预定义模式组)
ANSI
- 等同于
REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,ONLY_FULL_GROUP_BY
,接近标准SQL语法。
- 等同于
DB2/MSSQL/ORACLE/POSTGRESQL
- 兼容其他数据库的语法组合(如
PIPES_AS_CONCAT,ANSI_QUOTES
等),但这些模式在MySQL 8.0中已移除。
- 兼容其他数据库的语法组合(如
注意事项
- 不同MySQL版本的默认模式可能不同(如5.7默认包含
ONLY_FULL_GROUP_BY
和严格模式,而5.6默认宽松)。 - 部分模式(如
ERROR_FOR_DIVISION_BY_ZERO
)已弃用,未来版本可能整合到严格模式中。
完整列表可参考MySQL官方文档。