【问题标题】:SQL mode only_full_group_by causing error in Lumen 5.7SQL 模式 only_full_group_by 在 Lumen 5.7 中导致错误
【发布时间】:2019-05-01 11:59:42
【问题描述】:

我已将流明版本从 5.6 更新到 5.7。在这个Illumination/database 包v5.7.15 中默认启用MySQL 模式only_full_group_by。这会导致我的一些 Group By 查询失败。大多数人建议在流明中禁用严格模式。我认为禁用严格模式不是正确的解决方案。 MySQL 中是否有任何替代查询可用?或者我需要在 PHP 中构建一个逻辑?我正在使用 MySQL 5.6

我正在使用类似的查询

SELECT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR 
FROM test_table 
GROUP BY MONTH, YEAR

我没有使用聚合函数。 data_created 列具有日期时间数据类型

【问题讨论】:

  • 查看查询并更改它们。如果没有 only_full_group_by,您可能会得到不正确或意外的结果。通常的解决方案是将 select 子句中的所有列添加到 group by 子句中。
  • @SalmanA :我正在使用 SELECT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR FROM test_table GROUP BY MONTH, YEAR 之类的查询。我没有使用聚合函数。 data_created 列具有日期时间数据类型。

标签: php mysql laravel lumen


【解决方案1】:

此 SQL 查询将解决问题:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

【讨论】:

    【解决方案2】:

    如果您使用 MySQL 5.7,您应该通过更改 SQL 查询来补偿 full_group_by,或者您可以从 mysq 设置中删除 full_group_by 选项

    【讨论】:

      【解决方案3】:

      对于那种不使用需要 GROUP BY 的聚合函数的查询,可以像这样使用 distinct:

      SELECT DISTINCT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR 
      FROM test_table 
      

      所以这样你就不需要禁用full_group_by 限制

      你也可以这样做:

      SELECT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR 
      FROM test_table 
      GROUP BY MONTHNAME(date_created), YEAR(date_created) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-24
        • 1970-01-01
        • 2017-05-24
        • 1970-01-01
        • 1970-01-01
        • 2012-09-08
        • 1970-01-01
        • 2017-07-22
        相关资源
        最近更新 更多