首頁 >資料庫 >mysql教程 >為什麼在啟用二進位日誌記錄的情況下 MySQL 會拋出「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?

為什麼在啟用二進位日誌記錄的情況下 MySQL 會拋出「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?

Barbara Streisand
Barbara Streisand原創
2024-11-03 20:18:29269瀏覽

Why Does MySQL Throw

錯誤:啟用二進位日誌記錄的函數宣告中缺少「DETERMINISTIC、NO SQL 或READS SQL DATA」

匯入資料庫時MySQL,遇到錯誤「1418 (HY000):此函數在其聲明中沒有DETERMINISTIC、NO SQL 或READS SQL DATA,並且啟用了二進位日誌記錄」表示有問題的函數缺少適當的聲明。

解決方法:

有兩種方法可以解決此問題:

  1. 執行MySQL 控制台指令:

    <code class="mysql">SET GLOBAL log_bin_trust_function_creators = 1;</code>

    此指令放寬了對非確定性函數的檢查,允許匯入繼續進行。

  2. 設定mysql.ini:
    新增將以下行加入mysql.ini 設定檔:

    log_bin_trust_function_creators = 1

說明:

二進位日誌記錄對資料庫所做的所有修改。預設情況下,MySQL 要求修改資料的函數在其宣告中宣告為 DETERMINISTIC、NO SQL 或 READS SQL DATA,以確保它們可以準確複製。

儲存函數的確定性聲明:

這些聲明告知 MySQL 函數的性質,指導最佳化和複製決策。
  • DETERMINISTIC:
  • 總是產生相同結果的函數相同的輸入,無論外部因素如何。
  • 非確定性:
  • 對於相同輸入可以產生不同結果的函數,例如包含非確定性 MySQL 函數的函數(例如 NOW() , UUID())。
  • 讀取 SQL 資料:
  • 從資料庫讀取資料而不修改資料的函數。
  • NO SQL:
  • 函數不包含 SQL 語句。

注意:

如果停用二進位日誌記錄,則 log_bin_trust_function_creators 設定不適用。因此,確保指定適當的確定性聲明至關重要。

透過實作提供的解決方案之一,您可以解決錯誤並繼續資料庫匯入。

以上是為什麼在啟用二進位日誌記錄的情況下 MySQL 會拋出「DETERMINISTIC、NO SQL 或 READS SQL DATA」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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