mysql函数保存时,出现下面的错误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_crea
时间: 2023-11-06 19:18:03 浏览: 41
这个错误是因为 MySQL 函数没有被声明为 DETERMINISTIC、NO SQL 或者 READS SQL DATA 中的任何一种。在启用二进制日志记录的情况下,这会导致错误。为了解决这个问题,你需要在函数声明中添加一个 DETERMINISTIC、NO SQL 或 READS SQL DATA 关键字。例如:
```
CREATE FUNCTION my_function(param INT) RETURNS INT
DETERMINISTIC
BEGIN
DECLARE result INT;
-- 函数逻辑
RETURN result;
END;
```
如果你确实需要使用 log_bin_trust_function_creators 参数来跳过该错误,那么你需要先确认是否允许这样做。你可以在 MySQL 配置文件中设置 log_bin_trust_function_creators 参数为 1,或者在 MySQL 命令行中使用 SET GLOBAL log_bin_trust_function_creators=1; 命令来临时启用该参数。但是需要注意的是,这会降低 MySQL 的安全性。
相关问题
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
这个错误通常出现在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;
```
需要注意的是,这个设置可能会导致安全问题,因此在生产环境中应该谨慎使用。
导入数据时出现问题 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)
这个问题是因为在开启了二进制日志记录(binary logging)的情况下,MySQL中的函数没有被声明为DETERMINISTIC、NO SQL或READS SQL DATA中的任何一种,导致MySQL无法安全地记录这些函数的更改。为了解决这个问题,你可以使用以下两种方法中的一种:
1. 在MySQL中设置log_bin_trust_function_creators变量:
在MySQL命令行中输入以下命令:
```
SET GLOBAL log_bin_trust_function_creators = 1;
```
这将允许具有任何声明类型的函数被记录到二进制日志中。
2. 修改函数声明:
在函数声明中添加DETERMINISTIC、NO SQL或READS SQL DATA中的任何一种。例如:
```
CREATE FUNCTION my_function(param1 INT) RETURNS INT
DETERMINISTIC
BEGIN
-- function body
END;
```
这将使函数被声明为确定性函数(deterministic function),或不涉及SQL语句(no SQL)或只涉及读取SQL数据(reads SQL data),从而使函数能够被记录到二进制日志中。
阅读全文