数据库
首页 > 数据库> > 【MySQL】【转】MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL……

【MySQL】【转】MySQL 创建函数报错 This function has none of DETERMINISTIC, NO SQL……

作者:互联网

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_creators

1、背景

使用Navicat创建MySQL函数时报错,报错信息如下:

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)

问题原因

这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句

其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。如果我们开启了 bin-log, 我们就必须为我们的function指定一个参数。

2、解决方案

在MySQL中创建函数时出现这种错误的解决方法有两种:

方案1临时方案):先执行下面的SQL语句,在执行创建函数的语句即可,但是重启数据库就会失效,治标不治本。

SET GLOBAL log_bin_trust_function_creators = 1;

方案2根本方案):在my.cnf配置文件里面设置

log-bin-trust-function-creators=1

不过,这个需要重启MySQL服务。

【说明】:

当二进制日志启用后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建。

转载:https://www.cnblogs.com/miracle-luna/p/10856302.html

标签:function,bin,DETERMINISTIC,函数,MySQL,报错,SQL
来源: https://www.cnblogs.com/wsx2019/p/15874297.html