发布
社区首页 >问答首页 >为什么当将最新的MySQL降级为MySQL 5.0.88时,使用限制不再起作用?

为什么当将最新的MySQL降级为MySQL 5.0.88时,使用限制不再起作用?
EN

Stack Overflow用户
提问于 2012-07-06 07:06:56
回答 2查看 196关注 0票数 1

我不确定我在这里的正确位置。

我在MySQL中有一个存储过程,它对结果的限制如下:

代码语言:javascript
代码运行次数:0
复制
...
ORDER BY param_sort1, param_sort2
LIMIT param_start, param_end
;

*param_start*和*param_end*都以整数的形式传入,如下所示:

代码语言:javascript
代码运行次数:0
复制
...
IN `param_start` INT, 
IN `param_end` INT
...

当使用最新的MySQL在我的开发服务器上工作时,生产服务器仍在运行MySQL 5.0.88,并在LIMIT子句上抛出一个语法错误。如果我把它注释掉,它就会正常工作。

我对MySQL相当陌生,对于如何在MySQL的旧版本中正确地执行此操作完全一无所知。

问题:

有什么小窍门能帮到你吗?

谢谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-06 07:19:56

在MySQL 5.0中,不能将变量或参数用于限制参数。MySQL 5.5支持此特性。

作为解决办法-构造一个查询字符串并使用准备好的陈述执行它。

类似于这个(编辑)

代码语言:javascript
代码运行次数:0
复制
CREATE PROCEDURE procedure(IN param_start INT, IN param_end INT)
BEGIN
  SET @param_start = param_start;
  SET @param_end = param_end;
  SET @sql = CONCAT('SELECT * FROM table LIMIT ?, ?');
  PREPARE stmt FROM @sql;
  EXECUTE stmt USING @param_start, @param_end;
  DEALLOCATE PREPARE stmt;
END
票数 2
EN

Stack Overflow用户

发布于 2012-07-06 07:21:56

这是一个用于5.1.36版本的示例查询

*从customer限制2000,1000中选择*;*

我认为您应该升级到最新的MySQL稳定版本,并尝试因为v5.0.88不再稳定,并且MySQL已经停止了对v5.0树的支持,升级到v5.5树,看看它是否已经修复。

这些bug报告可能是相关的http://bugs.mysql.com/bug.php?id=50510 http://bugs.mysql.com/bug.php?id=46217

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11357431

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档