確定性、無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)
解決問題
有兩個解決此問題的方法:
SET GLOBAL log_bin_trust_function_creators = 1;
log_bin_trust_function_creators = 1;
這放寬了對非確定性函數(即修改資料的函數)的檢查。
理解確定性聲明
確定性函數對於相同的輸入參數總是產生相同的結果,而非確定性函數則不會。 MySQL 在複製最佳化期間使用這些聲明。
確定性聲明的類型
有幾種類型的確定性聲明可用:
NO SQL: 宣告函數不包含 SQL 語句。
CONTAINS SQL:
宣告函數包含 SQL 指令,但不會讀取或寫入資料。 最佳實踐建議為儲存的資料正確指定確定性聲明確保最佳複製和資料完整性的功能。透過仔細考慮函數的性質並使用適當的聲明,您可以防止錯誤並優化資料庫效能。以上是為什麼我的 MySQL 函數會拋出有關確定性宣告的「1418 (HY000)」錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!