MySql版本问题sql_mode=only_full_group_by
报错:1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated c
错误代码1055
原因 select子句中包含GROUP BY子句中没有的列,并且没有使用聚合函数,并且sql_mode=only_full_group_by
mysql5.7及之后版本默认启用了only_full_group_by SQL模式,这也是标准的sql语法。也就是说如果你用的5.5,5.6版本不会出现这个问题。
解决方法
-
如果你确实需要在select结果集中包含这一列,那么你应该在GROUP BY子句中添加这一列。
-
如果你不想在GROUP BY子句中添加这一列,那么你应该对它使用合适的聚合函数(如SUM, COUNT, MAX, MIN等)。
3.修改sql_mode
说一下如何修改sql_mode
select @@GLOBAL.sql_mode; 查询当前的sql_mode
SET sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 修改当前数据库
SET @@global.sql_mode ='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; 修改全部数据库
也可以SET sql_mode ="" 直接置空
这样改的话重启数据库会失效,但是可以实时解决问题。
永久解决:修改mysql配置文件my.cnf(有的系统是my.ini)里的sql_mode,修改完后需要重启数据库
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通