参数说明
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 | mysql> select @@global.sql_mode; |
ONLY_FULL_GROUP_BY
:SELECT
内指定字段必须出现在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 | [mysqld] |
- 阿里云 RDS 设置
1 | sql_mode=REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_UNSIGNED_SUBTRACTION,NO_DIR_ |