一、问题描述编辑
有些项目初期是在MySQL5.6(以上)进行开发,后期由于某种原因升级到MySQL5.7之后,可能就会突然发现原来的一些sql运行都报错。
例如:错误代码:1301 数据集配置错误Query:Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column
二、问题分析编辑
从上面的错误代码我们不难看出,应该是和sql的Group By语法有关。经过查阅5.7的资料证实:由于sql_mode的only_full_group_by模式是默认(开启)的,以前能正常运行的一些语法(不规范)不再被兼容导致的报错,必须严格按照sql语法书写。
三、解决方案编辑
3.1 在sql查询语句中不需要group by的字段上使用any_value()函数。但是,这种处理方法对于已经开发完成的项目好像不太现实,因为可能设置到的修改语句实在太多(不推荐)!
注: any_value(field) 函数允许非分组字段的出现(和关闭 only_full_group_by 模式有相同效果)
3.2 在sql查询语句前添加 SET GLOBAL sql_mode = ''; 把sql_mode的only_full_group_by模式关闭。
3.3 修改my.cnf(windows下是my.ini)配置文件,删掉only_full_group_by这一项。
3.4 如果在my.ini中找不到 only_full_group_by 项,我们可以打开mysql命令行,执行命令:select @@sql_mode得到sql_mode的值,将其添加到my.cnf文件的配置项里面(务必删掉only_full_group_by这个选项,其他的都复制过去)
内容大概:sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3.5 重启MySQL服务。