this is incompatible with sql_mode=only_full_group_by 解决方案 mysql

之前在进行数据库迁移时,出现过这种错误,网上查了下,原因和解决方法如下:

一、报错原因分析 

这个错误发生在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

 

 

posted @ 2022-12-20 21:23  小log  阅读(1405)  评论(0编辑  收藏  举报