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,修改完后需要重启数据库