萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL 5.0 自增主鍵失效?罪魁禍首是 STRICT_TRANS_TABLES SQL_MODE

現象

MySQL 5.0.2+ 預設開啟 STRICT_TRANS_TABLES 模式,導致 AUTO_INCREMENT 欄位在特定情況下(如隱性插入 0 或 NULL、資料截斷)拋出錯誤而非警告,造成插入失敗。

根因

my.ini 預設配置:

sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"

STRICT_TRANS_TABLES:嚴格模式下,非法資料(超範圍、類型不符、隱性轉換失敗)直接報錯中斷,不再寫入「調整後」的值。

解決方案

  1. 編輯 my.ini(Windows)或 my.cnf(Linux)。
  2. 註釋或移除 STRICT_TRANS_TABLES:
# Set the SQL mode to strict
# sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
sql-mode="NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
  1. 重啟 MySQL 服務生效。

副作用與權衡

  • 關閉嚴格模式後,非法資料會被「悄悄修正」並寫入(如超長字串截斷、超範圍數值截取),可能隱藏資料品質問題。
  • 建議:修正應用程式代碼(顯式指定自增欄位為 NULL/0、嚴格驗證輸入長度與型別),保留嚴格模式,才是長久之計。
  • 若必須關閉,請在測試環境充分驗證資料完整性後再上線。

查看當前 SQL_MODE

SELECT @@sql_mode;
-- 或
SHOW VARIABLES LIKE 'sql_mode';
copyright © 萬盛學電腦網 all rights reserved