赞
踩
产生原因说是,在MySQL数据库版本为5.7以上的版本,默认开启了 ONLY_FULL_GROUP_BY SQL模式,在此模式下,对于group by操作,如果在select语句中的查询列没有在group by中出现,那么这个SQL就是非法的,因为列不在group by语句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错。
select @@sql_mode;
或者
select @@global.sql_mode;
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';
如果第一条命令修改不成功的话,使用第二条命令
set @@global.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
flush privileges;
exit;
注意:以上均可在Navicat中操作,如果执行完命令,依然报错,重启Navicat即可!!!
上述方案只是通过sql语句暂时性修改sql_mode;重启mysql数据库服务之后,ONLY_FULL_GROUP_BY还会出现。如要完美解决,可以参考以下方案!
需修改mysql配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性。
windows 在安装目录下的my.ini 文件
Mac 或者Linux 在/ etc/my.cnf
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启Mysql服务即可!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。