Mac上mysql 5.7 修改sql_mode ONLY_FULL_GROUP_BY

ONLY_FULL_GROUP_BY是MySQL提供的一个sql_mode,通过这个sql_mode来提供SQL语句GROUP BY合法性的检查,在MySQL的sql_mode是非ONLY_FULL_GROUP_BY语义时。一条select语句,MySQL允许target list中输出的表达式是除聚集函数或group by column以外的表达式,这个表达式的值可能在经过group by操作后变成undefined。

一般方式

1、查看sql_mode

SELECT @@sql_mode;

查询出来的值为:

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

2、去掉ONLY_FULL_GROUP_BY,重新设置值。

SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

3、上面是改变了全局sql_mode,对于新建的数据库有效。对于已存在的数据库,则需要在对应的数据下执行:

SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';

废话半天,但是其实同事和我本地这样设置都没有生效。

大家都明白,工具里面修改一般是临时的,只有修改配置文件才是永久的,但是比如在同事电脑上参考好几种网络上的说法修改了/etc/my.cnf文件,也还是没有奏效。

windows 在安装目录下的my.ini 文件
Mac 或者Linux 在/ etc/my.cnf 下面应该是
总之就是在个人mysql配置文件中修改。

另一个方式

最后没办法了,下面的命令却不小心达到了目的,特此记录一下。

SET @@sql_mode=REPLACE(@@sql_mode, 'ONLY_FULL_GROUP_BY', '');  

你可能感兴趣的:(Mac上mysql 5.7 修改sql_mode ONLY_FULL_GROUP_BY)