創建存儲函數時遇到經典錯誤:
ERROR 1418 (HY000): This routine 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_routine_creators variable)
開啟二進制日誌(log_bin)時,MySQL 要求函數聲明明確指定確定性特性(DETERMINISTIC、NO SQL 或 READS SQL DATA),否則拒絕創建。
在 my.ini 的 [mysqld] 區段添加:
log_bin_trust_function_creators = 1
重啟 MySQL 服務即可。該參數允許創建未聲明確定性的函數,但需自行確保函數邏輯在主從複制環境下的安全性。
生產環境建議在函數定義中顯式聲明特性,例如:
CREATE FUNCTION my_func()
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
-- 函數體
END;
這樣既符合規範,又避免依賴寬鬆配置帶來的潛在複制風險。