能够创建过程但不能创建函数

能够创建过程但不能创建函数

我可以创建 mysql 存储过程,但不能创建存储函数。

例子:

DELIMITER $$;
DROP FUNCTION IF EXISTS `interkm_db1`.`temp`$$
CREATE FUNCTION `interkm_db1`.`temp` ()
    RETURNS int
BEGIN
    return 1;
END$$
DELIMITER ;$$

错误代码:1418 此函数的声明中没有 DETERMINISTIC、NO SQL 或 READS SQL DATA,并且启用了二进制日志记录(您可能想要使用不太安全的 log_bin_trust_function_creators 变量)

当我使用 DETERMINISTIC 语句时,它仍然抱怨它没有 SUPER 权限。

这是 ISP 托管的 mysql 安装。

SHOW VARIABLES LIKE "%version%";
protocol_version    10
version 5.1.61-0+squeeze1-log
version_comment (Debian)
version_compile_machine i486
version_compile_os  debian-linux-gnu

更多细节我只对我的数据库拥有所有权限

授予所有权限interkm_db1。* 至'interkm_1'@'%' 授予使用权授予“interkm_1”@“%”密码“-------”的所有权限interkm_db1。* 授予“interkm_1”@“%”的所有权限

答案1

参考来源:http://dev.mysql.com/doc/refman/5.1/en/stored-programs-logging.html

要创建或修改存储函数,除了通常需要的 CREATE ROUTINE 或 ALTER ROUTINE 权限外,还必须具有 SUPER 权限。(根据函数定义中的 DEFINER 值,无论是否启用二进制日志记录,都可能需要 SUPER。请参见第 13.1.9 节“CREATE PROCEDURE 和 CREATE FUNCTION 语法”。)

由于这是共享安装(ISP 托管),因此你不太可能获得极好的权限。这允许很大程度的全系统控制。

除此之外,您还必须包含上述 3 件事之一,以便 binlogging/复制系统知道如何处理您的功能(如果您有使用它的权限)。

答案2

通过重建数据库解决!

我猜这可能是一个标准解决方案,但是当它发生在我身上时我几乎感到恐慌。

对于那些遇到类似问题的人来说。

尝试重新创建您的数据库。

至于它为什么会坏掉,我还是不知道

相关内容