原因:mySql 5.7以上,sql_mode中的“only_full_group_by”是默认开启的,修改sql_mode参数即可
一旦开启 only_full_group_by ,感觉,group by 将变成和 distinct 一样,只能获取受到其影响的字段信息,无法和其他未受其影响的字段共存,这样,group by 的功能将变得十分狭窄了
only_full_group_by 模式开启比较好。因为在 mysql 中有一个函数: any_value(field) 允许,非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)。
解决方案一
在 Navicat中
查看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_ENGINE_SUBSTITUTION
去掉: ONLY_FULL_GROUP_BY
STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重新设置 sql_mode
SET @@global.sql_mode = 你查出的值去掉 ONLY_FULL_GROUP_BY 加 ’ ’ 号
代码如下:
-- 查询sql_mode
SELECT @@sql_mode;
-- 设置 sql_node
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
这样就解决啦,但是当重启mysql时 就会 回归原来的1055 的错误
第一种只是暂时解决
永久解决:
在liunx下 解决方案:找到mysql的配置文件
我的是在 /etc/my.cnf
使用vim打开 找到【mysqld】添加sql_mode 代码如下:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
添加完成之后wq保存退出 重启mysql即可
liunx下mysql启动命令
启动服务: service mysql start
关闭服务: service mysql stop
重启服务: service restart stop