SQL 模式 only_full_group_by 导致 Lumen 5.7 出错
SQL mode only_full_group_by causing error in Lumen 5.7
我已将流明版本从 5.6 更新到 5.7。在此 illuminate/database 软件包 v5.7.15 中,默认启用 MySQL 模式 only_full_group_by。这会导致我的一些 Group By 查询失败。大多数人建议在 lumen 中禁用严格模式。我认为禁用严格模式不是正确的解决方案。 MySQL 中是否有可用的替代查询?或者我需要在 PHP 中构建逻辑?我正在使用 MySQL 5.6
我正在使用
这样的查询
SELECT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR
FROM test_table
GROUP BY MONTH, YEAR
我没有使用聚合函数。 data_created 列具有日期时间数据类型
此 SQL 查询将解决问题:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
如果您使用 MySQL 5.7,您应该通过更改 SQL 查询来补偿 full_group_by,或者您可以从 mysq 设置中删除 full_group_by 选项
对于那种不使用需要 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)
我已将流明版本从 5.6 更新到 5.7。在此 illuminate/database 软件包 v5.7.15 中,默认启用 MySQL 模式 only_full_group_by。这会导致我的一些 Group By 查询失败。大多数人建议在 lumen 中禁用严格模式。我认为禁用严格模式不是正确的解决方案。 MySQL 中是否有可用的替代查询?或者我需要在 PHP 中构建逻辑?我正在使用 MySQL 5.6
我正在使用
这样的查询SELECT MONTHNAME(date_created) MONTH, YEAR(date_created) YEAR
FROM test_table
GROUP BY MONTH, YEAR
我没有使用聚合函数。 data_created 列具有日期时间数据类型
此 SQL 查询将解决问题:
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
如果您使用 MySQL 5.7,您应该通过更改 SQL 查询来补偿 full_group_by,或者您可以从 mysq 设置中删除 full_group_by 选项
对于那种不使用需要 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)