本次问题发生在我将WampServer工具里从 Version 2.2 升级到 Version 3.0.6 64bit
同时也把MySQL从5.5.20升级到5.7.14版本,然后之前写的部分sql语句就出错了。
错误信息:[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
查找文档发现问题就出在升级后的MySQl对 Group by 的限制
ONLY_FULL_GROUP_BY:
对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中
那我们去查看下MySQL里Sql_mode的信息
并没有任何配置信息
再看WampServer里MySQL的配置信息
发现sql_mode是采用默认的配置,并且有配置ONLY_FULL_GROUP_BY 的值
那就好办了,我们重新设置sql_mode的值,并把ONLY_FULL_GROUP_BY去掉不就好了
在my-default.ini 文件里修改sql_mode的值
默认是 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
(这里有个问题,发现这里并没有设置ONLY_FULL_GROUP_BY,不管了先修改吧)
修改为 sql_mode=NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,
ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES
修改好保存文件,重新启动MySQL服务。
运行程序发现依然报那个错误,这就纳闷了
查看sql_mode 的信息,发现和开始一样还是 null ,没有任何配置信息
再看WampServer里MySQL的配置信息
会发现sql-model下面多了一项 user mode ,这就是刚才在 my-default.ini 文件里修改的sql_mode的配置
不要犹豫选择它,MqSql服务会自动重启
再看MySql的配置信息
可以看到,我们设置的sql_mode配置启用了
那么检查下结果对不对呢
运行之前出错的语句,成功返回结果。