代码之家  ›  专栏  ›  技术社区  ›  Jithin Vijayan

在mysql 8.0的存储过程中不使用用户定义参数的限制

  •  0
  • Jithin Vijayan  · 技术社区  · 6 年前

    当我尝试使用 存储过程 , the 极限 语句不使用startindex和endindex参数。下面的代码生成mysql错误2013,ie Lost connection to MySQL server during query .

    这只会发生在mysql版本8.0中,并且在下面的版本(如5.7等)中正常工作。当我移除 极限 程序中的条件。

    之后,我尝试使用prepare stmt这个查询由于使用了多个concat而产生一个错误。

    CREATE PROCEDURE return_something(IN markFilter VARCHAR(100), IN nameFilter VARCHAR(100), IN startIndex INT, IN endIndex INT)
    BEGIN
    CREATE TEMPORARY TABLE temp_user_details
    SELECT id, name, address FROM user_details  
    WHERE (CASE WHEN markFilter!='' THEN FIND_IN_SET(mark,markFilter) ELSE mark IS NOT NULL END) 
    AND (CASE WHEN nameFilter !='' THEN name LIKE CONCAT('%',nameFilter,'%') ELSE id IS NOT NULL END)
    LIMIT startIndex, endIndex;
    
    SELECT id, name FROM temp_user_details;
    DROP TEMPORARY TABLE return_something;
    END
    call return_something('','', 0, 100);
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   slaakso    6 年前

    最可能的原因是超时。limit子句可能会使查询变慢,因此连接超时。

    您没有说明从何处调用过程。如果从命令行调用,可以尝试调整 connect_timeout -变量。