在 MySQL 5.6.14 環境中執行 SQL 語句時,可能會遇到以下錯誤:
ERROR 1665 (HY000): Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED.
當 InnoDB 存儲引擎的事務隔離級別設定為 READ COMMITTED 或 READ UNCOMMITTED 時,InnoDB 強制使用行級日誌記錄。然而,若全域 binlog_format 設定為 STATEMENT 模式,兩者產生衝突,導致無法寫入二進制日誌,從而拋出此錯誤。
動態調整全域二進制日誌格式為 MIXED 模式,該模式會根據語句類型自動在 Statement 和 Row 之間切換,兼容性最佳:
SET GLOBAL binlog_format = 'MIXED';
執行後,新建立的會話將自動採用 MIXED 格式,錯誤即可解除。建議在配置文件 my.cnf 中同步修改 binlog_format=MIXED,以確保重啟後依然生效。