[Err] 1418 - MySQL创建函数出错

[Err] 1418 - 创建函数出错

错误描述

  今天启用了MySQL二进制日志,然后再使用MySQL创建函数,运行语句进行创建时总是报如下错误:

   [Err] 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)

  经查阅资料发现原来是因为启用了MySQL的二进制日志造成的,经过多次尝试发现了三种解决方案。

解决方案

  方案一

    在创建函数的同时为函数指定一个参数,明确指出函数的类型。因为数据库启用bin-log后,在进行主从复制必须要知道这个函数的类型才能同步数据,因此在声明函数时我们必须指定我们的函数的类型,MySQL支持的参数类型有以下五种:

    1. DETERMINISTIC 不确定的

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

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

    4. MODIFIES SQL DATA 要修改数据

    5. CONTAINS SQL 包含了SQL语句

  方案二

  将log_bin_trust_function_creators 设置为1,启动MySQL运行下面命令:

    set GLOBAL log_bin_trust_function_creators=1;

  因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。因此,设置这个参数就相当于明确告知MySQL服务器这个函数不会修改数据,这样就能顺利进行函数的创建。

  默认 log_bin_trust_function_creators=0,处于关闭状态

  设置 log_bin_trust_function_creators=1,处于开启状态

  设置好之后就可以直接创建函数了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值