首頁 >資料庫 >mysql教程 >為什麼啟用二進位日誌記錄時 MySQL 會拋出有關確定性函數的錯誤?

為什麼啟用二進位日誌記錄時 MySQL 會拋出有關確定性函數的錯誤?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 15:31:02707瀏覽

Why Does MySQL Throw an Error About Deterministic Functions When Binary Logging is Enabled?

MySQL 錯誤:「此函數在其聲明中沒有DETERMINISTIC、NO SQL 或READS SQL DATA,並且啟用了二進位日誌記錄」

嘗試將資料庫匯入MySQL 時,可能會發生錯誤,指示函數在其聲明中缺少以下聲明之一:DETERMINISTIC、NO SQL 或READS SQL DATA。啟動二進位日誌記錄時會出現此錯誤。

解決錯誤:

可以透過兩種方式解決此錯誤:

  1. 設定MySQL 控制台: 在MySQL 控制台中執行以下命令:

    SET GLOBAL log_bin_trust_function_creators = 1;
  2. 編輯設定檔:將以下行新增至mysql.ini 設定檔:

    log_bin_trust_function_creators = 1;

這些修改允許將非確定性函數與二進位日誌記錄一起使用。但是,如果停用二進位日誌記錄,這些設定不會影響錯誤。

理解函數宣告:

  • DETERMINISTIC: 表示函數對於相同的輸入參數總是產生相同的結果。
  • NOT DETERMINISTIC: 表示相反,對於相同的輸入參數,函數的結果可能會有所不同。
  • READS SQL DATA: 明確指定函數僅從資料庫讀取資料。
  • NO SQL: 表示函數不包含任何 SQL 語句。
  • CONTAINS SQL: 表示函數包含 SQL 指令,但不修改資料。

需要注意的是,包含非確定性指令的函數,例如 NOW() 或 UUID(),應聲明為 NOT DETERMINISTIC。此外,從未複製模式讀取資料的函數也是不確定的。

最佳實踐:

理想的方法是理解和利用儲存函數的確定性聲明因為它們有助於複製最佳化。 MySQL 建議在儲存函數的定義中明確指定上述聲明之一,以避免潛在的錯誤。

以上是為什麼啟用二進位日誌記錄時 MySQL 會拋出有關確定性函數的錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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