MySQL创建自定义函数时 Error Code: 1418 的解决方法
2016-12-16 00:24
309 查看
今天在MySQL中创建函数时,报了以下错误:
Error Code: 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手册,错误原因如下:
由于基于语句的复制,在从库重放日志里的事件时,使用函数这种非确定性事件可能导致主从数据不一致,因此,开启二进制日志功能后,MySQL会对函数的创建做出限制。
解决方法:
首先要知道,在 MySQL中,函数的类别有:
1.CONTAINS SQL 包含了SQL语句(函数默认为这种类型)
2.READS SQL DATA 只是读取数据,不修改数据
3.NO SQL 没有SQL语句(当然也不会修改数据)
4.DETERMINISTIC 确定的
5.MODIFIES SQL DATA 将修改数据
因此如果我们想创建函数,必须指明函数的类别为 READS SQL DATA 或 NO SQL 或 DETERMINISTIC。
即告诉 MySQL,我这个函数要么是确定性的,要么根本就不会写数据,因此不会对复制产生影响。
还有一个方法,即将全局参数 log_bin_trust_function_creators 设为 on,代表受信任的函数创建者,也就是使MySQL不对函数做出限制。注意,如果是在运行过程中修改该值,重启服务器后,修改就会丢失,因此要手动修改配置文件。
Error Code: 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手册,错误原因如下:
由于基于语句的复制,在从库重放日志里的事件时,使用函数这种非确定性事件可能导致主从数据不一致,因此,开启二进制日志功能后,MySQL会对函数的创建做出限制。
解决方法:
首先要知道,在 MySQL中,函数的类别有:
1.CONTAINS SQL 包含了SQL语句(函数默认为这种类型)
2.READS SQL DATA 只是读取数据,不修改数据
3.NO SQL 没有SQL语句(当然也不会修改数据)
4.DETERMINISTIC 确定的
5.MODIFIES SQL DATA 将修改数据
因此如果我们想创建函数,必须指明函数的类别为 READS SQL DATA 或 NO SQL 或 DETERMINISTIC。
... CREATE READS SQL DATA FUNCTION ... ...
即告诉 MySQL,我这个函数要么是确定性的,要么根本就不会写数据,因此不会对复制产生影响。
还有一个方法,即将全局参数 log_bin_trust_function_creators 设为 on,代表受信任的函数创建者,也就是使MySQL不对函数做出限制。注意,如果是在运行过程中修改该值,重启服务器后,修改就会丢失,因此要手动修改配置文件。
相关文章推荐
- mysql 创建函数时出现 Error Code : 1418 错误解决办法
- mysql 创建函数时出现 Error Code : 1418 错误解决办法
- MySql 创建函数 Error Code : 1418
- mysql导入自定义函数不成功的解决方法
- mysql创建函数出现1418错误的解决办法
- mysql创建函数出现1418错误的解决办法
- MySQL 错误1418 的原因分析及解决方法
- MySQL 1418错误解决方法
- SQLyog恢复数据库报错解决方法【Error Code: 2006 - MySQL server has gone away】
- 对自定义函数建立索引时抛异常--ORA-30553: 函数不能确定(ORA-30553: The function is not deterministic)解决方法
- Mysql创建表或外键约束时出现1005错误代码的解决方法
- QT 自定义信号与信号槽方法及解决自定义数据类型或数组作为函数参数的问题
- Mysql创建自定义函数
- Mysql无法创建函数 错误码: 1418
- mysql jsp 解决乱码 创建数据库 数据表 方法
- 深入mysql创建自定义函数与存储过程的详解
- AMP server mysql 不能创建存储过程解决方法
- mysql 创建函数的1418错误解决方案
- error C2833 MFC添加任意自定义函数报错 解决方法
- Mysql Query Browser下创建存储过程和自定义函数