首页 > 代码库 > mysql 报错之创建自定义函数
mysql 报错之创建自定义函数
I experienced this error while trying to alter one of my stored procedures remotely on a master server. After some research, I ended up getting information from “Binary Logging of Stored Programs“.
From MySQL Reference in verbatim:
When you create a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication.
By default, for a CREATE FUNCTION statement to be accepted, at least one of DETERMINISTIC, NO SQL, or READS SQL DATA must be specified explicitly. Otherwise an error occurs:
Further reading helped me arrive to the conclusion to the cause of this error:
The error arises if the binary logging option, which is required for the replication, is turned on for the MySQL server.
We can choose solutions listed below depending to our system requirements, for me, I opted on using the later.
- When creating or altering a stored function, you must declare either that it is deterministic or that it does not modify data. Otherwise, it may be unsafe for data recovery or replication.
- To relax the preceding conditions on function creation (that you must have the SUPER privilege and that a function must be declared deterministic or to not modify data), set the global log_bin_trust_function_creators system variable to 1. By default, this variable has a value of 0, but you can change it like this:mysql> SET GLOBAL log_bin_trust_function_creators = 1;
You can also set this variable by using the –log-bin-trust-function-creators=1 option when starting the server.
POSTED ON SUNDAY, NOVEMBER 11TH, 2012 AT 11:54 PM PRINT THIS ARTICLE EMAIL THIS ARTICLE
ob·liv·i·on
Reference : Merriam-Webster
- the fact or condition of forgetting or having forgotten; especially : the condition of being oblivious
- the condition or state of being forgotten or unknown
tH3 oBlivIOus
Aldwin Llacuna Galapon
IT Consultant / Software and Web Developer
Do not take life too seriously. You might not get out of it alive!