ERROR 1418 (HY000)

MySQL创建自定义函数时报错(MySQL版本:8.0.13);

错误信息:ERROR 1418 (HY000): 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> SET GLOBAL log_bin_trust_function_creators = 1;
Query OK, 0 rows affected (0.01 sec)

官方文档:

http://dev.mysql.com/doc/refman/5.0/en/stored-programs-logging.html

原因:

当您尝试执行存储函数时,如果 binlog_format=STATEMENT已设置,则DETERMINISTIC必须在函数定义中指定关键字。如果不是这种情况,则会生成错误并且函数不会运行,除非 log_bin_trust_function_creators=1 指定覆盖此检查(参见下文)。对于递归函数调用,DETERMINISTIC仅在最外层调用时需要该关键字。如果正在使用基于行或混合二进制日志记录,则即使在没有DETERMINISTIC关键字的情况下定义函数,也会接受并复制该语句 。

因为MySQL在创建时不检查函数是否确实是确定性的,所以使用DETERMINISTIC关键字调用存储函数可能会执行对基于语句的日志记录不安全的操作,或者调用包含不安全语句的函数或过程。如果在binlog_format=STATEMENT 设置时发生这种情况 ,则会发出警告消息。如果正在使用基于行或混合二进制日志记录,则不会发出警告,并且将以基于行的格式复制语句。

要放松函数创建的前述条件(必须具有SUPER 权限并且必须将函数声明为确定性或不修改数据),请将全局log_bin_trust_function_creators 系统变量设置 为1.默认情况下,此变量的值为0,但是你可以改变它:

mysql> SET GLOBAL log_bin_trust_function_creators = 1;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值