执行 sql 报错未缓冲查询,错误码 2014

sql语句为

SELECT
    COUNT(id) AS tp_count 
  FROM
    `tableName` 
  WHERE
    `status` = 0 
    AND `source` = 1 
    AND (
      `end_time`-`add_time` > 2592000 
      AND `end_time`-`add_time` <= 5184000 
    ) LIMIT 1

发生报错如下

PDOException:SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询。
考虑使用PDOStatement :: fetchAll()。
或者,如果您的代码只是针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。

在google查找报错信息,各种改配置,优化 sql,没有明确办法

在阿里云 SDN上执行 sql,发现报错

Data truncation: BIGINT UNSIGNED value is out of range in '(`end_time`-`add_time` > 2592000 
     AND `end_time`-`add_time` <= 5184000 
   )'

经过排查发现,有的数据中end_time小于 add_time,所以 sql 条件运算为负值,产生 BIGINT UNSIGNED 报警,于是修改 sql 如下

SELECT
    COUNT(id) AS tp_count 
  FROM
    `tableName` 
  WHERE
    `status` = 0 
    AND `source` = 1 
    AND `end_time` > `add_time`
    AND (
      `end_time`-`add_time` > 2592000 
      AND `end_time`-`add_time` <= 5184000 
    ) LIMIT 1

则问题解决

转载于:https://www.cnblogs.com/zongsir/p/2014-sql-HY000-wei-huan-chong-cha-xun-cuo-wu.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值