之前在进行数据库迁移时,出现过这种错误,网上查了下,原因和解决方法如下:
一、报错原因分析
这个错误发生在mysql 5.7.5 版本及以上版本会出现的问题, 我的版本是5.7.x linux,但是我windos本机8.x 版本没有这个问题,不排除机器不同影响。
mysql 5.7.5版本以上默认的sql配置是:sql_mode=“ONLY_FULL_GROUP_BY”,这个配置严格执行了"SQL92标准"。
因此,在sql执行时,出现该问题,简单来说就是:
由于开启了ONLY_FULL_GROUP_BY的设置,如果select 的字段不在 group by 中,
并且select 的字段未使用聚合函数(SUM,AVG,MAX,MIN等)的话,那么这条sql查询是被mysql认为非法的,会报错误
#查看数据库版本:
SELECT VERSION()
#查看sql_mode
select @@GLOBAL.sql_mode;
二、解决办法
方法一:临时修改数据库配置
#修改全局 于新建的数据库有效。
mysql> SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)
#修改当前设置 对于已存在的数据库,则需要在对应的数据下执行:
mysql> SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
Query OK, 0 rows affected (0.00 sec)
但是,当我们再一次重新启动数据库时,可能会恢复原样,还是会出现ONLY_FULL_GROUP_BY的报错,这就需要我们再一次修改数据库配置。
方法二:永久修改数据库配置
修改配置文件my.ini
在[mysqld]模块下新增一行配置
sql_mode='STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
运行后重启,即可生效
方法三:SQL语句修改,使用 聚合函数或者 优化语句
SUM,AVG,MAX,MIN,any_value() 或 group_concat()等
参考:
https://blog.csdn.net/qq118640594X/article/details/128024350
https://blog.csdn.net/qq_35349114/article/details/108277591
标签:full,group,incompatible,数据库,sql,NO,ZERO,mode,mysql From: https://www.cnblogs.com/hungryquiter/p/16995127.html