sql_mode=only_full_group_by错误

MySQL sql_mode=only_full_group_by错误


运行环境是没问题,一到线上就报事务异常回滚,于是看了错误日志信息,发现错误在sql。
sql_mode=only_full_group_by错误_第1张图片
在这里插入图片描述
才明白,线上的mysql和本地的mysql配置不一样,于是找到原因。原来是数据库版本为5.7以上的版本,

默认是开启了 only_full_group_by 模式的,但开启这个模式后,原先的 group by 语句就报错。

查看mysql的my.cnf发现
sql_mode=only_full_group_by错误_第2张图片
其中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

在这里插入图片描述

你可能感兴趣的:(个人纪录)