1

我在我的计算机上创建了一个数据库,安装了MySQL 5.5MySQL Workbench 5.2.34 CE。然后我想将数据库迁移到另一台安装了MySQL 5.0的计算机上。(我只需要迁移架构,不需要数据)

我使用 MySQL Workbench 的File -> Export -> Forward Engineer SQL CREATE 脚本生成db.sql脚本并将其复制到另一台计算机。

我键入mysql < db.sql来创建数据库,但只收到一个错误。

这里发生错误:

DELIMITER $$

CREATE PROCEDURE `filedb`.`GetIncompleteFileId` (in latestFileId BIGINT UNSIGNED, in serverBits BIT(32), in fileCount SMALLINT UNSIGNED)

BEGIN
    SELECT `id`, `key`, `length`, `path`
    FROM
    (
        SELECT * FROM `filedb`.`fileInfo` WHERE `id` <= latestFileId
    ) AS TempTable
    WHERE (serverBits & `serverownership` NOT IN (serverBits, 0))
    ORDER BY `id` DESC
    LIMIT fileCount;
END

$$

错误在'fileCount; 结尾'。如果我删除“LIMIT fileCount”,错误就会消失。

有人告诉我有什么问题吗?

4

1 回答 1

4

在 MySQL 5.0 中,LIMIT 参数必须是非负整数常量,而不是变量或过程参数。使用准备好的语句来避免此错误。

从 MySQL 5.0 文档 -

LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量(使用准备好的语句时除外)。

从 MySQL 5.5 文档 -

LIMIT 子句可用于限制 SELECT 语句返回的行数。LIMIT 接受一个或两个数字参数,它们都必须是非负整数常量,但以下情况除外:

在准备好的语句中,可以使用 LIMIT 指定参数?占位符标记。

在存储程序中,LIMIT 参数可以使用整数值例程参数或 MySQL 5.5.6 的局部变量来指定。

于 2012-06-21T09:31:56.687 回答