在创建存储函数保存时
出错信息:
ERROR 1418 (HY000): This function has none of DETERMINISTIC, NOSQL, or READS SQL DATA in its declaration and binary logging isenabled (you *might* want to use the less safelog_bin_trust_function_creators variable)
翻译:
该函数在声明的时候没有声明其具有不确定性,没有SQL,或是只是读取数据和二进制日志启用(你可能想使用不安全的log_bin_trust_function_creators变量)
原因:
这是我们开启了bin-log, 我们就必须指定我们的函数是否是1 DETERMINISTIC 不确定的
2 NO SQL 没有SQl语句,当然也不会修改数据
3 READS SQL DATA 只是读取数据,当然也不会修改数据
4 MODIFIES SQL DATA 要修改数据
5 CONTAINS SQL 包含了SQL语句
mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin | ON |
+---------------+-------+
1 row in set
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | OFF |
+---------------------------------+-------+
1 row in set
可以看到我的确开启了bin_log,而且log_bin_trust_function_creators为关闭。
接下来操作:
mysql> set global log_bin_trust_function_creators=1;
Query OK, 0 rows affected
mysql> show variables like 'log_bin_trust_function_creators';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| log_bin_trust_function_creators | ON |
+---------------------------------+-------+
1 row in set
就发现能正常保存函数。
这样处理在重启mysql后就会失效,想要永久有效就要在my.cnf中加上该参数。