为了账号安全,请及时绑定邮箱和手机立即绑定

函数创建不了,为什么?

mysql> CREATE FUNCTION f1() RETURNS VARCHAR(30) 
     ->RETURN DATE_FORMAT(NOW(),'%Y年%m月%d日 %H点:%i分:%s 秒');
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)


正在回答

2 回答

原因:这是因为我们开启了bin-log, 我们就必须指定我们的函数是否是

        DETERMINISTIC 不确定的

        NO SQL 没有SQl语句,当然也不会修改数据

        READS SQL DATA 只是读取数据,当然也不会修改数据

        MODIFIES SQL DATA 要修改数据

        CONTAINS SQL 包含了SQL语句

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

解决: 

1.在创建子程序(存储过程、函数、触发器)时,声明为DETERMINISTIC或NO SQL与READS SQL DATA中的一个,

例如:CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()

        DETERMINISTIC

        BEGIN

             #Routine body goes here...

        END;;            

2.信任子程序的创建者,禁止创建、修改子程序时对SUPER权限的要求,设置log_bin_trust_routine_creators全局系统变量为1。

   设置方法有三种:

        ①在客户端上执行SET GLOBAL log_bin_trust_function_creators = 1;

        ③在MySQL配置文件my.ini或my.cnf中的[mysqld]段上加log-bin-trust-function-creators=1                      


0 回复 有任何疑惑可以回复我~

解决方法:
set global log_bin_trust_function_creators=TRUE;

7 回复 有任何疑惑可以回复我~
#1

qq_长颈鹿yT_0

为什么写下这条就可以运行了?
2018-08-15 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

函数创建不了,为什么?

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信