Incorrect integer value: '' for column 'id' at row 1
向整型列插入空字符串 '' 觸發,MySQL 5.0+ 嚴格模式默認開啟。
STRICT_TRANS_TABLES:嚴格類型檢查NULL 或數值-- 錯誤
INSERT INTO test VALUES('', $val, '');
-- 正確:自增主鍵不寫或寫 NULL
INSERT INTO test (col1, col2) VALUES($val, 'text');
-- 或
INSERT INTO test VALUES(NULL, $val, 'text');
-- 或
INSERT INTO test VALUES(DEFAULT, $val, 'text');
所有數值類型列:空值用 NULL,自增用 DEFAULT 或省略。
SET SESSION sql_mode = 'NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';
僅當前連接生效,斷開失效。
[mysqld]
sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 移除 STRICT_TRANS_TABLES, STRICT_ALL_TABLES
重啟生效。副作用:數據質量下降,非法數據靜默截斷/轉換。
唯一出路:修正應用代碼,所有數值字段插入前判空轉 NULL。
SHOW VARIABLES LIKE 'sql_mode';
INSERT INTO test (id) VALUES (NULL); -- 成功
INSERT INTO test (id) VALUES (''); -- 失敗 (嚴格模式下)
STRICT_TRANS_TABLES 開啟,保障數據質量NULLDEFAULT NULL 或 DEFAULT 0 明確默認值