MySQL · 配置参数 · sql_mode

参数说明

sql_mode:它定义了 MySQL 应该支持的 SQL 模式,对数据的校验等。

Property Value
Command-Line Format --sql-mode=name
System Variable sql_mode
Scope Global, Session
Dynamic Yes
Type Set
Default Value (>= 5.7.8) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ZERO_IN_DATE NO_ZERO_DATE ERROR_FOR_DIVISION_BY_ZERO NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
Default Value (5.7.7) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_AUTO_CREATE_USER NO_ENGINE_SUBSTITUTION
Default Value (>= 5.7.5, <= 5.7.6) ONLY_FULL_GROUP_BY STRICT_TRANS_TABLES NO_ENGINE_SUBSTITUTION
Default Value (<= 5.7.4) NO_ENGINE_SUBSTITUTION
Valid Values ….
1
2
3
4
5
6
7
mysql> select @@global.sql_mode;
+-------------------------------------------------------------------------------------------------------------------------------------------+
| @@global.sql_mode |
+-------------------------------------------------------------------------------------------------------------------------------------------+
| ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION |
+-------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
  • ONLY_FULL_GROUP_BYSELECT 内指定字段必须出现在 ORDER BY 中,否则错误。
  • STRICT_TRANS_TABLES:为事务存储引擎启用严格的 SQL 模式。
  • NO_ZERO_IN_DATE:严格模式下,不接受月或日部分为 0 的日期。
  • NO_ZERO_DATE:严格模式下,认为日期 '0000-00-00' 非法。
  • ERROR_FOR_DIVISION_BY_ZERO:严格模式下,除 0 错误。
  • NO_AUTO_CREATE_USER:授权之前必须先创建用户。
  • NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。
  • STRICT_ALL_TABLES:为所有存储引擎启用严格 SQL 模式,无效的数据值报错。

设置

  • 动态设置
1
mysql> set global sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';
  • 静态设置
1
2
[mysqld]
sql_mode = NO_ENGINE_SUBSTITUTION
  • 阿里云 RDS 设置
1
2
3
4
5
sql_mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_UNSIGNED_SUBTRACTION,NO_DIR_
IN_CREATE,POSTGRESQL,ORACLE,MSSQL,DB2,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,MYSQL
323,MYSQL40,ANSI,NO_AUTO_VALUE_ON_ZERO,NO_BACKSLASH_ESCAPES,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,
NO_ZERO_IN_DATE,NO_ZERO_DATE,ALLOW_INVALID_DATES,ERROR_FOR_DIVISION_BY_ZERO,TRADITIONAL,HIGH_NOT
_PRECEDENCE,NO_ENGINE_SUBSTITUTION,PAD_CHAR_TO_FULL_LENGTH