-
MySQL5.7版本默认设置了 mysql sql_mode = only_full_group_by 属性,导致出现问题:
- MySQL函数:any_value(field) 允许,非分组字段的出现,和关闭 only_full_group_by 模式有相同效果。
- 很多时候从5.6升级到5.7时,为了语法兼容,大部分都会选择调整sql_mode,使其保持跟5.6一致,为了尽量兼容程序。
- 查询MySQL数据库版本
select version();
- 查看sql_mode的语句
select @@GLOBAL.sql_mode;
- sql语句暂时性修改sql_mode(重启mysql数据库服务之后,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
- 推荐解决方案
- 修改my.cnf配置文件,通过手动添加sql_mode的方式强制指定不需要ONLY_FULL_GROUP_BY属性,
my.cnf位于etc文件夹下,vim下光标移到[mysqld]后添加配置
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- 重启服务
service mysqld restart