在mysql创建function时经常出现的一个报错,
原因是开启了binary log,而且创建的函数没有指定如下之一的参数。
DETERMINISTIC
READS SQL DATA
NO SQL
其完整报错是:
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)
【解决方案】:
其解决办法,只要将log_bin_trust_function_creators设置为1即可。
log_bin_trust_function_creators参数是一个全局变量,只能用
SET @@GLOBAL.log_bin_trust_function_creators = 1; 这类global方式设置其值,该值为布尔类型:
故1、ON、TRUE同义,同样0、OFF、FALSE同义。
| Command-Line Format | --log-bin-trust-function-creators | ||
| System Variable Name | log_bin_trust_function_creators | ||
| Variable Scope | Global | ||
| Dynamic Variable | Yes | ||
| Permitted Values | |||
| Type | boolean | ||
| Default | FALSE | ||
这个参数在开启二进制日志时被应用,它认为存储函数的创建者必须为可信任的,反之写入二进制日志将认为是不安全的。
该参数默认为0,除非用户有SUPER权限,此外还需有CREATE ROUTINE和ALTER ROUNTINE权限,才可创建和修改存储函数。
如果设置为1,mysql不会强制有哪些创建限制,这个参数同样适用于TRIGGER的创建。
作者微信公众号(持续更新)
