如何解决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 17:26:18 浏览: 51
这个错误是因为MySQL开启了二进制日志记录(binary logging),并且函数或存储过程的声明中没有指定DETERMINISTIC、NO SQL或READS SQL DATA属性。
要解决这个问题,有以下两个方法:
方法一:使用log_bin_trust_function_creators变量
由于这个错误是因为MySQL开启了二进制日志记录,可以通过修改log_bin_trust_function_creators变量来解决这个问题。
1. 登录到MySQL客户端。
2. 运行以下命令:
```
SET GLOBAL log_bin_trust_function_creators = 1;
```
这将允许创建没有DETERMINISTIC、NO SQL或READS SQL DATA属性的函数或存储过程,并将它们记录到二进制日志中。
3. 重新创建函数或存储过程。
方法二:指定DETERMINISTIC、NO SQL或READS SQL DATA属性
如果您不想修改log_bin_trust_function_creators变量,可以通过在函数或存储过程的声明中指定DETERMINISTIC、NO SQL或READS SQL DATA属性来解决这个问题。
1. 在创建函数或存储过程的声明中,添加以下属性之一:
- DETERMINISTIC:如果函数或存储过程返回相同的结果,则指定函数或存储过程是确定性的。
- NO SQL:指定函数或存储过程不会修改数据库中的数据。
- READS SQL DATA:指定函数或存储过程只会读取数据库中的数据。
例如,以下是一个创建函数并指定DETERMINISTIC属性的示例:
```
CREATE FUNCTION my_function_name (param1 INT, param2 VARCHAR(50))
RETURNS INT DETERMINISTIC
BEGIN
-- function body
END;
```
2. 重新创建函数或存储过程。
这样,函数或存储过程就会被正确创建,并且可以记录到二进制日志中。