zoukankan      html  css  js  c++  java
  • 执行 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
    

    则问题解决

  • 相关阅读:
    etcd+confd管理nginx
    k8s基础
    nginx配置总结
    Golang相关
    docker基础
    celery结合django使用配置
    常用算法
    python3和paramiko安装
    git使用总结
    Linux系统入门实操经验分享
  • 原文地址:https://www.cnblogs.com/zongsir/p/2014-sql-HY000-wei-huan-chong-cha-xun-cuo-wu.html
Copyright © 2011-2022 走看看