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版本不会出现这个问题。

解决方法

  1. 如果你确实需要在select结果集中包含这一列,那么你应该在GROUP BY子句中添加这一列。

  2. 如果你不想在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,修改完后需要重启数据库

     

 

posted @ 2024-04-28 10:16  了悟  阅读(10)  评论(0编辑  收藏  举报