首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL "Data truncated for column" 錯誤原因與解決方案

     編輯:MySQL 綜合教學

MySQL "Data truncated for column" 錯誤分析與修復

報錯 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+ 默認報錯阻止。

修復:先清洗/截斷數據,再修改列定義。

排查步驟

  1. 查看完整錯誤信息:SHOW WARNINGS; 或 SHOW ERRORS;。
  2. 對比 SHOW CREATE TABLE 與實際寫入值。
  3. 檢查 sql_mode:SELECT @@sql_mode; 是否包含 STRICT_TRANS_TABLES。

最佳實踐

  • 設計階段預留足夠長度(如手機號 VARCHAR(20)、JSON TEXT/JSON)。
  • 應用層使用參數綁定,避免拼接 SQL 導致格式錯誤。
  • 保持嚴格模式開啟,及早暴露數據質量問題。
  • DDL 變更前先在測試環境驗證現有數據兼容性。

總結

Data truncated 本質是「寫入值超出列定義容納範圍」。通過擴大列定義、修正業務數據、保持嚴格模式,可徹底解決。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved