匯入包含建立函數/預存程序的 SQL 檔案時,報錯:
ERROR 1418 (HY000) at line 8752: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled...
開啟二進制日誌(log_bin)時,MySQL 要求建立的函數/程序必須宣告以下特性之一,以確保複寫安全:
DETERMINISTIC:相同輸入必產生相同輸出NO SQL:不包含 SQL 語句READS SQL DATA:只讀取資料不修改MODIFIES SQL DATA:會修改資料(需搭配 log_bin_trust_function_creators)SET GLOBAL log_bin_trust_function_creators = 1;
編輯 my.cnf(Linux)或 my.ini(Windows),在 [mysqld] 區段新增:
log_bin_trust_function_creators = 1
重啟服務:systemctl restart mysqld 或 service mysql restart。
在建立函數/程序時顯式宣告特性:
CREATE DEFINER = CURRENT_USER PROCEDURE `NewProc`()
DETERMINISTIC
BEGIN
-- Routine body goes here...
END;
或針對唯讀函數:
CREATE FUNCTION `MyFunc`() RETURNS INT
READS SQL DATA
BEGIN
RETURN 1;
END;