参考: Mysql自定义函数报错解决方法
1.在MySql中创建自定义函数报错信息如下:
1.1 错误显示
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)
1.2 错误原因
开启了二进制日志binlog后,自定义函数需要声明包含这几个关键字的一个或多个
在 MySQL 中,如果你要创建一个自定义函数,并且数据库启用了二进制日志记录(binary logging),则函数必须在其声明中包含 DETERMINISTIC、NO SQL 或 READS SQL DATA 中的一个或多个关键字,以确保函数的安全性和可靠性。
这是我们开启了bin-log, 我们就必须指定我们的函数是否是
1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
1.3 解决方法:
mysql>set global log_bin_trust_function_creators=1; ##true也可以
2. Mysql没有 create or replace function
Oracle 下这种是可以的, 但是Mysql只有 create or replace procedure
这里要创建函数时实现相同效果,可以这么写:
drop function if exists XXX