1418 - This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
时间: 2023-11-06 13:31:27 浏览: 190
这个错误是因为MySQL启用了二进制日志记录(binary logging),而你的函数没有指定是否为确定性函数(deterministic function)、是否访问数据库(reads SQL data)、或是否修改数据库(no SQL)。
为了解决这个错误,你可以向函数定义中添加一些修饰符(modifiers),以指定函数的特性。例如,在这个函数中,你可以将其定义为一个无需访问数据库、但不是确定性的函数,代码如下:
```
CREATE DEFINER = CURRENT_USER FUNCTION `generate_records`(`num_records` int,`expire` datetime)
RETURNS int
DETERMINISTIC
NO SQL
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE actcode VARCHAR(16);
WHILE i < num_records DO
SET actcode = SUBSTRING(MD5(RAND()), 1, 16);
INSERT INTO `bdzs` (`actcode`, `expiretime`) VALUES (actcode, expire);
SET i = i + 1;
END WHILE;
RETURN i;
END;
```
在这个版本的函数中,我们添加了两个修饰符:`DETERMINISTIC`表示这个函数是确定性的,即对于相同的输入参数,总是返回相同的结果;`NO SQL`表示这个函数不需要访问数据库。这样,你就可以在启用二进制日志记录的情况下安全地创建和使用这个函数了。
如果你不想使用修饰符,也可以通过设置MySQL的`log_bin_trust_function_creators`变量来禁用函数创建者检查,从而绕过这个错误。不过,这种做法会降低MySQL的安全性,不建议在生产环境中使用。
阅读全文