mysql:设置sql_mode

查看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。

-------------本文结束 感谢您的阅读-------------