参数说明
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_ |