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

rn0zuynd  于 2021-06-18  发布在  Mysql
关注(0)|答案(1)|浏览(351)

当我尝试使用存储过程从user details表中获取用户详细信息时,limit语句不能使用startindex和endindex参数。下面的代码生成mysql错误2013,即 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);
puruo6ea

puruo6ea1#

最可能的原因是超时。limit子句可能会使查询速度变慢,从而导致连接超时。
您没有说明调用过程的来源。如果从命令行调用,可以尝试调整 connect_timeout -变量。

相关问题