LIMIT无法在MySQL 8.0的存储过程中使用用户定义的参数

时间:2018-10-31 11:36:49

标签: mysql stored-procedures mysql-workbench mysql-error-2013

当我尝试使用存储过程从用户详细信息表中获取用户详细信息时, LIMIT 语句不适用于startIndex和endIndex参数。以下代码产生MySQL错误2013,即Lost connection to MySQL server during query。       

这只会在MySQL 8.0版中发生,并且可以在5.7等以下版本中正常工作。并且当我从过程中删除 LIMIT 条件时也可以使用。

之后,我尝试使用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 个答案:

答案 0 :(得分:0)

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

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