-- 欄位定義:a VARCHAR(10)
INSERT INTO abc (a) VALUES ('bfdsafdsafdsafdsa'); -- 16 字元 > 10
-- 錯誤
#1264 - Out of range value adjusted for column 'a' at row 1
解決:修改欄位長度 ALTER TABLE abc MODIFY a VARCHAR(20); 或應用層截斷/驗證。
-- 表定義:id INT AUTO_INCREMENT PRIMARY KEY
INSERT INTO news (ID, Title, Content) VALUES ('', '標題', '正文');
-- MySQL 5.0.17+ 嚴格模式報錯
Out of range value adjusted for column 'ID' at row 1
原因:sql_mode 含 STRICT_TRANS_TABLES,空字串 '' 無法隱式轉為整數 0。
-- 不寫 ID 欄位,讓自增自動生成
INSERT INTO news (Title, Content) VALUES ('標題', '正文');
-- 或顯式給 NULL/0
INSERT INTO news (ID, Title, Content) VALUES (NULL, '標題', '正文');
# my.cnf / my.ini
[mysqld]
# 移除 STRICT_TRANS_TABLES
sql-mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# 重啟生效
systemctl restart mysqld
⚠️ 關閉嚴格模式會導致資料截斷、無效日期寫入成功但內容錯誤,生產環境嚴禁。
SELECT @@sql_mode;
SHOW VARIABLES LIKE 'sql_mode';
STRICT_TRANS_TABLES 開啟,讓資料庫做最後防線