sql_mode作为mysql数据库的环境变量,定义了mysql应该支持的sql语法,数据校验等。
mysql5.0+支持三种sql_mode模式:
- ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
- TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。
- STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
由于MySQL5.6+中使用了STRICT_TRANS_TABLES模式,使MySQL 5.7控制的更加严格,一些低版本的SQL语句就无法执行了。
1.查看默认的SQL模式:
2.修改默认sql_mode模式:
2.1 临时生效,数据库重启失效
mysql> SET global sql_mode="IGNORE_SPACE,NO_ZERO_IN_DATE, "> NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO, "> NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION";
2.2 永久生效
[mysqld] sql_mode=IGNORE_SPACE,NO_ZERO_IN_DATE,\ NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,\ NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION # /etc/init.d/mysqld restart
2018-06-20 01:56