This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
时间: 2023-12-26 14:27:04 浏览: 216
这个错误通常出现在MySQL中创建函数时,表示函数声明中没有包含DETERMINISTIC、NO SQL或READS SQL DATA中的任何一个,同时二进制日志记录也是启用的。这个错误提示建议你使用log_bin_trust_function_creators变量来解决。log_bin_trust_function_creators是一个MySQL系统变量,它控制是否允许创建具有任意定义的函数和过程。如果设置为1,则可以创建具有任意定义的函数和过程,否则将无法创建。可以通过以下命令来设置log_bin_trust_function_creators变量:
```sql
SET GLOBAL log_bin_trust_function_creators = 1;
```
需要注意的是,这个设置可能会导致安全问题,因此在生产环境中应该谨慎使用。
相关问题
[err] 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)
这个错误提示是因为MySQL的二进制日志功能被启用,但是函数声明中没有指定函数是确定性的、不涉及SQL读取或写入数据的。为了解决这个问题,可以使用log_bin_trust_function_creators变量,但这可能会降低安全性。
在navicat中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)如何解决
这个错误是因为在MySQL 5.7版本之后,为了提高安全性,对于一些函数和存储过程的定义进行了限制,只有具备DETERMINISTIC、NO SQL、READS SQL DATA属性的函数才可以被创建和调用,否则就会报出这个错误。
解决这个问题,有两种方法:
1. 设置log_bin_trust_function_creators变量:
打开navicat,连接到你的MySQL数据库,然后执行以下命令:
```
SET GLOBAL log_bin_trust_function_creators = 1;
```
这个命令可以让MySQL忽略函数或存储过程定义中缺少上述属性的限制。
2. 修改函数或存储过程的定义:
在函数或存储过程的定义中添加上述属性即可。例如:
```
CREATE FUNCTION myFunction(param1 INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
-- 这里是函数的具体实现
END;
```
这样定义的函数就可以被创建和调用了。需要注意的是,如果函数或存储过程本身就具备这些属性,则不需要进行修改。
阅读全文