查看sql_mode
1 | select @@sql_mode; |
查询出来的值为:1
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
去掉需要去掉的后,例如去掉NO_ZERO_DATE,set回去:1
set sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
这是对于已存在的数据库,改变其sql_mode,但是对于以后新建的数据库,sql_mode的默认值还是一开始查出来的值。
设置新数据库的sql_mode
使用1
set @@sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
改变了全局sql_mode,对于新建的数据库有效,但是仅仅对于这次连接有效。
修改配置文件
安装了mysql后,网上说在etc目录中有my.cnf,但是5.7版本好像没有,但是在etc/mysql中有,在该文件夹末尾加上:1
2[mysqld]
sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
注意,这里没有set。
即没有NO_ZERO_DATE,然后输入service mysql restart重启mysql服务,进入mysql后,输入select @@sql_mode,会发现就是配置文件中设置好的sql_mode。