mysql关于sql_mode报错

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

快速解决

SELECT @@sql_mode;
SET @@GLOBAL.sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

若失败,sql_mode设置被限制在会话级别:在某些情况下,MySQL管理员可能会限制对GLOBAL级别sql_mode设置的更改。这意味着可以更改会话级别的sql_mode设置,但无法更改全局设置。解决如下:

SET SESSION sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

报错原因

  1. 错误信息与MySQL中的sql_mode设置相关。默认情况下,MySQL启用了严格模式,包括ONLY_FULL_GROUP_BY模式。该模式要求在使用GROUP BY子句时,SELECT子句中的所有列都必须要么包含在GROUP BY子句中,要么包含在聚合函数(如COUNT()SUM()等)中。

  2. 错误提示指出ORDER BY子句中的表达式#1不在GROUP BY子句中,并且包含非聚合列information_schema.PROFILING.SEQ,这与ONLY_FULL_GROUP_BY模式不兼容。

解决办法

  1. sql_mode设置为非严格模式,以允许在GROUP BY子句中使用非聚合列。可以通过修改MySQL的配置文件(如my.cnfmy.ini)来更改sql_mode设置,或者在每个会话中使用SET语句进行修改。
  2. 将非聚合列包含在GROUP BY子句中,以满足ONLY_FULL_GROUP_BY模式的要求。
  3. 使用聚合函数对非聚合列进行聚合操作,以满足ONLY_FULL_GROUP_BY模式的要求。

其他情况

如果在MySQL安装中没有找到my.ini文件,那么可以尝试以下方法来修改sql_mode设置:

  1. 登录MySQL服务器,可以使用命令行工具如MySQL Shell或通过图形化工具如phpMyAdmin。

  2. 执行以下SQL语句,查看当前的sql_mode设置:

    SELECT @@sql_mode;
    

    这将返回当前的sql_mode值。

  3. 根据查询结果,确定要修改的sql_mode设置。您可以将ONLY_FULL_GROUP_BYsql_mode中移除,或者根据需要进行其他调整。

  4. 执行以下SQL语句,修改sql_mode设置:

    SET GLOBAL sql_mode = '<new_sql_mode>';
    

    <new_sql_mode>替换为您希望设置的新的sql_mode值。

    注意:SET GLOBAL语句会立即生效,但只会影响新的连接,已经存在的连接不会受到影响。如果您希望立即生效并影响所有连接,可以使用SET @@GLOBAL.sql_mode = '<new_sql_mode>';语句。

  5. 重新执行第2步的SQL语句,确保sql_mode已经被修改。

通过以上步骤,能够成功修改sql_mode设置,解决ONLY_FULL_GROUP_BY模式引起的问题。

注意

请注意,在修改sql_mode设置时,需要谨慎评估和测试对现有应用程序和查询的影响。确保了解各个模式的含义,并根据自己的需求进行调整。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值