首頁  >  文章  >  資料庫  >  為什麼我的 MySQL 函數會拋出有關確定性宣告的「1418 (HY000)」錯誤?

為什麼我的 MySQL 函數會拋出有關確定性宣告的「1418 (HY000)」錯誤?

DDD
DDD原創
2024-11-02 12:22:30155瀏覽

Why Does My MySQL Function Throw a

確定性、無SQL 或在啟用二進位日誌記錄的函數宣告中讀取SQL 資料

在嘗試將資料庫匯入MySQL 時,錯誤訊息表明函數在其聲明中缺少以下聲明之一併且可能會啟用二進位日誌記錄:

1418 (HY000) at line 10185: 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)

解決問題

有兩個解決此問題的方法:

  1. 在MySQL 控制台中執行以下命令:
SET GLOBAL log_bin_trust_function_creators = 1;
  1. 將以下內容新增至mysql.ini 設定檔:
log_bin_trust_function_creators = 1;

這放寬了對非確定性函數(即修改資料的函數)的檢查。

理解確定性聲明

確定性函數對於相同的輸入參數總是產生相同的結果,而非確定性函數則不會。 MySQL 在複製最佳化期間使用這些聲明。

確定性聲明的類型

有幾種類型的確定性聲明可用:

  • DETERMINISTIC:
  • DETERMINISTIC:
  • DETERMINISTIC:聲明函數是確定性的。
  • NOT DETERMINISTIC: 宣告函數是非確定性的。
  • 讀取 SQL 資料: 宣告函數僅從資料庫讀取資料。

NO SQL: 宣告函數不包含 SQL 語句。

CONTAINS SQL:

宣告函數包含 SQL 指令,但不會讀取或寫入資料。 最佳實踐建議為儲存的資料正確指定確定性聲明確保最佳複製和資料完整性的功能。透過仔細考慮函數的性質並使用適當的聲明,您可以防止錯誤並優化資料庫效能。

以上是為什麼我的 MySQL 函數會拋出有關確定性宣告的「1418 (HY000)」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn