MySQL5.7后将sql_mode的ONLY_FULL_GROUP_BY模式默认设置为打开状态,这样一来,很多之前的sql语句可能会出现错误,错误信息如下:
Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column '×××' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
描述:select的列都要在group中,或许本身是聚合列(SUM,AVG,MAX,MIN)才行
解决方案一:
这时我们可以通过navicat输入select @@global.sql_mode来查看当前数据库的sql_mode属性值
复制查询结果,去掉ONLY_FULL_GROUP_BY,重新赋值,执行成功后,就可以将ONLY_FULL_GROUP_BY模式默认设置为关闭状态,解决之前的sql报错问题
set sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
但是这种方式设置的只是当前会话中的sql_model,服务器重启后,设置可能会失效,鉴于凡是重启之后都要手动去set @@global.sql_mode,所以比较麻烦
接下来介绍设置永久生效模式: 1.以下是window版本的:
找到mysql的安装目录,我的安装目录是 D:\software\mysql-5.7.24-winx64\mysql-5.7.24-winx64
之后重启mysql再去查询: select @@global.sql_mode 发现查询出来的值就是my.ini里面配置的sql_mode的内容
|