」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何解決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\」錯誤?

發佈於2024-11-16
瀏覽:257

How to Solve the \

匯入MySQL資料庫時,可能會遇到錯誤「1418 (HY000) at line 10185: This function has none of DETERMINISTIC, NO SQL, 或 READS SQL DATA in its statements 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。

READS SQL DATA:

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

NO SQL:

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

CONTAINS SQL:

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

選擇正確的聲明

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

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3