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:嚴格模式下,非法資料(超範圍、類型不符、隱性轉換失敗)直接報錯中斷,不再寫入「調整後」的值。
my.ini(Windows)或 my.cnf(Linux)。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"
SELECT @@sql_mode;
-- 或
SHOW VARIABLES LIKE 'sql_mode';