首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 創建自定義函數報錯 1418 解決方案

     編輯:MySQL 資料庫相關知識

創建存儲函數時遇到經典錯誤:

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;

這樣既符合規範,又避免依賴寬鬆配置帶來的潛在複制風險。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved