执行sql报错only_full_group_by的解决方法
最佳答案 问答题库588位专家为你答疑解惑
一、前言
最近老项目换新数据库(都是mysql),有些在老数据库可以执行的sql,在新数据库执行就会报错sql_mode=only_full_group_by
意思是说数据库的模式是sql_mode=only_full_group_by,group by的字段必须和查询字段一致才行,否则不让执行,例如:
但是这样不太能符合原本需要的功能,而且老项目有很多这样的不标准语句,都改不现实。
二、解决方法
修改数据库配置。搜到2种方法:
1.临时关闭only_full_group_by模式
(1)先查看自己的数据库是怎么配置的:
show VARIABLES LIKE 'sql_mode';
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTIO
(2)然后,把ONLY_FULL_GROUP_BY去掉,再设置下:set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
(3)注意这种方法,重启mysql后会失效
2.永久关闭only_full_group_by模式
(1) 找到配置文件/etc/my.cnf(或则关联文件夹找到mysql-server.cnf)
(2) 找到当前配置的sql_mode那行,去掉ONLY_FULL_GROUP_BY;
如果没有,就在文件内的[mysqld]后增加配置:
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
(3)保存配置文件后,重启Mysql。
三、备注
本人执行set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';报错了:
[Err] 1227 - Access denied; you need (at least one of) the SUPER privilege(s) for this operation
说明当前用户没有权限;需要联系管理员执行才行;
改服务器配置也同理,如果没有权限,联系管理员。
[SQL]SELECT
*
FROM
bsc_user_t A
group by user_name
limit 100
[Err] 1055 - Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'otp.A.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
解决办法
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
夕阳无限好,只是近黄昏
99%的人还看了
相似问题
- MySQL数据库:开源且强大的关系型数据库管理系统
- 【腾讯云云上实验室-向量数据库】探索腾讯云向量数据库:全方位管理与高效利用多维向量数据的引领者
- 【史上最细教程】服务器MySQL数据库完成主从复制
- 字符串结尾空格比较相关参数BLANK_PAD_MODE(DM8:达梦数据库)
- 缓存雪崩、击穿、穿透及解决方案_保证缓存和数据库一致性
- Redis 与其他数据库的不同之处 | Navicat
- 多协议数据库管理软件 Navicat Premium 16 mac中文版功能
- (数据库管理系统)DBMS与(数据库系统)DBS的区别
- duplicate复制数据库单个数据文件复制失败报错rman-03009 ora-03113
- 数据库课后习题加真题
猜你感兴趣
版权申明
本文"执行sql报错only_full_group_by的解决方法":http://eshow365.cn/6-35577-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!