報錯 Data truncated for column 'xxx' 通常由兩類原因導致:目標列數據類型/長度不足 或 嚴格模式下隱式轉換截斷。
插入/更新的字符串超過列定義長度(如 VARCHAR(10) 存入 15 字符)。
CREATE TABLE t (c VARCHAR(10));
INSERT INTO t VALUES ('12345678901'); -- 錯誤:Data truncated for column 'c'
修復:ALTER TABLE t MODIFY c VARCHAR(20); 或截斷業務數據。
TINYINT 範圍 -128~127(有符號)或 0~255(無符號),寫入 300 會截斷。
CREATE TABLE t (c TINYINT UNSIGNED);
INSERT INTO t VALUES (300); -- 錯誤
修復:改用 SMALLINT/INT 或業務限制範圍。
開啟 STRICT_TRANS_TABLES(5.7+ 默認開啟)時,INSERT INTO t (int_col) VALUES ('abc') 會報錯而非存 0。
修復:應用層做類型校驗;或臨時 SET sql_mode=''(不推薦生產)。
ALTER TABLE t MODIFY c VARCHAR(5) 而表中已有長度 10 的數據,MySQL 5.6+ 默認報錯阻止。
修復:先清洗/截斷數據,再修改列定義。
SHOW WARNINGS; 或 SHOW ERRORS;。SHOW CREATE TABLE 與實際寫入值。sql_mode:SELECT @@sql_mode; 是否包含 STRICT_TRANS_TABLES。VARCHAR(20)、JSON TEXT/JSON)。Data truncated 本質是「寫入值超出列定義容納範圍」。通過擴大列定義、修正業務數據、保持嚴格模式,可徹底解決。