首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 錯誤 1366 "Incorrect integer value" 解決:修正欄位預設值與 SQL_MODE

     編輯:MySQL 資料庫相關知識

遷移資料庫後執行 INSERT 報錯:

[Err] 1366 - Incteger integer value: '' for column 'shunxu' at row 1

原因:欄位 shunxu INT 預設值為 NULL,但應用傳入空字串 '',MySQL 嚴格模式 (STRICT_TRANS_TABLES) 拒絕隱式轉換。

快速修正 (修改預設值)

ALTER TABLE doc_main MODIFY shunxu INT NOT NULL DEFAULT 0;

或僅改預設值:

ALTER TABLE doc_main ALTER shunxu SET DEFAULT 0;

重啟 MySQL 服務使生效 (視版本而定,通常動態生效)。

根因:SQL_MODE 差異

SELECT @@SQL_MODE;
-- 5.7+ 預設含: STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_ENGINE_SUBSTITUTION
-- 5.6 或舊版可能未啟用 STRICT_TRANS_TABLES,允許 '' → 0 隱式轉換

三種應對策略

策略做法優點缺點
修正資料結構 (推薦)NOT NULL DEFAULT 0 + 應用層傳入數值資料品質高、符合嚴格模式需變更 DDL、應用同步調整
寬鬆 SQL_MODE移除 STRICT_TRANS_TABLES零代碼變更、快速相容舊應用掩蓋資料品質問題、非長久之計
應用層轉換空字串轉 NULL 或 0 再傳入不動資料庫、邏輯集中需修改所有寫入路徑

永久設定 SQL_MODE (my.cnf)

[mysqld]
sql_mode = "NO_ENGINE_SUBSTITUTION"  # 僅保留必要項,移除 STRICT_TRANS_TABLES

重啟後生效。生產環境建議保持嚴格模式,在應用層修正輸入。

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