首頁  >  文章  >  資料庫  >  如何解決MySQL中的「1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\」錯誤?

如何解決MySQL中的「1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\」錯誤?

Linda Hamilton
Linda Hamilton原創
2024-11-01 10:44:30986瀏覽

How to Solve the

匯入 MySQL 資料庫時,您可能會遇到錯誤「1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its ments and二進位日誌記錄已啟用(您可能想要使用較不安全的 log_bin_trust_function_creators 變數)。

要解決此錯誤,您可以使用以下兩種方法之一:

方法1:暫時停用二進位日誌記錄

SET GLOBAL log_bin_trust_function_creators = 1;

方法2:設定mysql.ini檔案

log_bin_trust_function_creators = 1;

將此值設為 1,您可以放寬檢查非確定性函數。應謹慎使用此選項,因為它可能會損害資料的完整性。

了解確定性函數

為了避免將來出現此錯誤,有更好的方法是對儲存函數使用確定性聲明。這些聲明告知 MySQL 此函數對於相同的輸入參數是否總是產生相同的結果。以下是不同的確定性聲明:

DETERMINISTIC:

  • 對於相同輸入參數始終產生相同結果的函數。

非確定性:

  • 對於相同的輸入參數並不總是產生相同結果的函數。如果沒有明確聲明,MySQL 預設為 NOT DETERMINISTIC。

讀取 SQL 資料:

  • 僅從資料庫讀取資料的函數。

NO SQL:

  • 不包含任何 SQL 語句的函數。

CONTAINS SQL:

  • 包含 SQL 指令但既不讀取也不寫入資料的函數。

選擇正確的聲明

選擇正確的聲明函數的聲明取決於其行為。如果函數的輸出取決於資料庫外部的因素,例如當前時間或隨機數產生器,則應將其宣告為 NOT DETERMINISTIC。如果函數僅讀取數據,則可以將其宣告為 READS SQL DATA。如果函數不包含任何SQL語句,可以宣告為NO SQL。

以上是如何解決MySQL中的「1418 (HY000) This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its statements and binarylogging isenabled\」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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