MySQL 創建函數報錯 This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled
背景描述
在MySQL中創建函數時,報錯如下:
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)
錯誤原因
這是我們開啟了bin-log, 我們就必須指定我們的函數是否是
1、DETERMINISTIC 不確定的
2、NO SQL 沒有SQl語句,當然也不會修改數據
3、READS SQL DATA 只是讀取數據,當然也不會修改數據
4、MODIFIES SQL DATA 要修改數據
5、CONTAINS SQL 包含了SQL語句
其中在function里面,只有 DETERMINISTIC, NO SQL 和 READS SQL DATA 被支持。
如果我們開啟了 bin-log, 我們就必須為我們的function指定一個參數。
解決方案
可以通過將變量 log_bin_trust_function_creators 的值設置為“開啟”實現。
方式1(臨時方案,MySQL服務重啟會失效)
可以通過SQL語句設置,SQL語句如下:
1)查詢變量值
show variables like 'log_bin_trust_function_creators';

2)設置變量值
set global log_bin_trust_function_creators = 1; show variables like 'log_bin_trust_function_creators';

方式2(永久方案,需要重啟MySQL服務,配置才能生效)
在 my.cnf 配置文件中添加如下一行配置,然后重啟MySQL服務
log_bin_trust_function_creators = 1

