MySQL sql_mode=only_full_group_by错误
运行环境是没问题,一到线上就报事务异常回滚,于是看了错误日志信息,发现错误在sql。
才明白,线上的mysql和本地的mysql配置不一样,于是找到原因。原来是数据库版本为5.7以上的版本,
默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错。
查看mysql的my.cnf发现
其中ONLY_FULL_GROUP_BY就是造成这个错误的罪魁祸首了,
对于group by聚合操作,如果在select中的列没有在group by中出现,那么这个SQL是不合法的,因为列不在group by从句中,所以设置了sql_mode=only_full_group_by的数据库,在使用group by时就会报错,
既然知道了问题,那么修改这个配置就可以了,找到MySQL的配置文件,在linux系统上/etc/my.cnf文件,查询sql_mode字段,我并没有在配置文件中找到这个关键字,所以我手动添加进去:
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
然后重启mysql
service mysqld restart
会发现没找到服务,因为centos7不支持mysql这个命令了
于是去掉 mysql 后面的 d
service mysql restart