0

当我尝试使用存储过程从用户详细信息表中获取用户详细信息时,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);
4

1 回答 1

0

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

你没有说明你从哪里调用程序。如果您从命令行调用,您可以尝试调整connect_timeout-variable。

于 2018-10-31T11:57:29.217 回答