关于lumen严格模式接口mysql5.6和mysql5.7报错问题

sql语句
SELECT DISTINCT
	`someid` 
FROM
	`sometable` 
WHERE
	`id` IN ( 123, 456, 789 ) 
	AND `status` = 1 
ORDER BY
	`updatetime` DESC 
	LIMIT 10 OFFSET 0
环境配置
生产环境使用的是 MySQL 5.6,而开发环境使用的是 MySQL 5.7。
生产环境的 SQL Mode 是空,开发环境的SQL Mode是 NO_ENGINE_SUBSTITUTION。
Lumen 配置:Lumen 的数据库配置文件中的 'strict' => env('DB_STRICT_MODE', true) 。
错误现象
  • sql语句在生产环境(MySQL5.6.16-log)和开发环境(MySQL5.7.32-log)执行都正常;
  • lumen接口在生产环境返回正常;在开发环境返回错误;
错误信息
General error: 3065 Expression #1 of ORDER BY clause is not in SELECT list, references column 'sometable.updatetime' which is not in SELECT list; this is incompatible with DISTINCT。
这个错误是因为在 SQL 查询中,你试图在 SELECT DISTINCT 语句后使用 ORDER BY 子句,而这个子句引用的列不在 SELECT 列表中。
问题分析

当你使用 DISTINCT 关键字时,SELECT 语句将返回唯一的行这意味着,你在 ORDER BY 子句中引用的任何列都必须包含在 SELECT 列表中,因为这些列是用来确定哪些行是“唯一”的。

解决方案
将 ORDER BY 子句中引用的列添加到 SELECT 列表中,或者删除 ORDER BY 子句。
总结

由于lumen指定了严格模式,导致接口会话的执行和navicat的窗口执行sql_mode是不同状态,所以测试环境的数据库能执行,但测试环境的接口不能执行。但为什么生产环境的数据库和生产环境的接口都能执行,还并不清楚。草草记录,留给需要的同学参考,欢迎各位同学指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小镇学者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值