場景:有的時候切換數據庫 或者重構遷移數據,源數據表和目標數據表數據類型不一致的時候會提示:Incorrect integer value:’ ’ for column columnname
檢查源表和目標表,確實會發現字段類型發生了變化,但數據值其實並沒有超出目標表字段數據類型
處理方案: 方式一,強制處理 源表的源字段的數據值;
方式二、檢查 目標表的數據庫的配置參數sql_mode
調整sql_mode,可以通過set @@global.sql_mode = ''
或者修正 在my.cnf修正如下配置
[mysqld]
sql_mode=''
ps:
1、修改sql_mode ,尤其調整到寬鬆模式,注意更容產生異常邊界數據出來。默認值是空值,在這種設置下是可以允許一些非法操作的,比如允許一些非法數據的插入
2、sql_mode 的常用參數值:
mysql5.0以上版本支持常見幾種sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
ANSI模式:寬鬆模式,對插入數據進行校驗,如果不符合定義類型或長度,對數據類型調整或截斷保存,報warning警告。 TRADITIONAL模式:嚴格模式,當向mysql數據庫插入數據時,進行數據的嚴格校驗,保證錯誤數據不能插入,報error錯誤。用於事物時,會進行事物的回滾。
STRICT_TRANS_TABLES模式:嚴格模式,進行數據的嚴格校驗,錯誤數據不能插入,報error錯誤。
NO_ENGINE_SUBSTITUTION
如果需要的存儲引擎被禁用或未編譯,可以防止自動替換存儲引擎。
具體更多參數說明:
http://www.jb51.net/article/28018.htm