Mysql運行模式及1690錯誤處理 MySQL said: Documentation
1690 - BIGINT UNSIGNED value is out of range inmysql
通過查詢,發現這個錯誤的緣由是兩個時間字段進行減法運算時,若是有一個時間爲0000-00-00時形成的,根本緣由是由於這樣減法的結果會超過Mysql數值字段的範圍,從而觸發1690報錯。sql
ERROR 1690 Out-of-Range
當Mysql中的數字字段存儲了一個超過容許範圍的數字時,會觸發1690 Out of Range錯誤,是否觸發錯誤取決於SQL運行時的模式:運維
當標準 Standar Mode 或 Strict Mode 運行時,數據插入會失敗
當非限制模式 No Restrictive 運行時,Mysql將數值轉化爲範圍容許內的最大或最小值進行存儲ide
解決方法code
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';文檔
在進行計算時,首先執行上面的語句,能夠避免減法運算過程當中的錯誤。在Mysql文檔中,明確指出兩個整數進行相減運算的結果是一個無符號數,在Mysql 5.5.5 以前,若是產生一個負數,mysql會將這個數轉換爲一個最大的數值。it
自Mysql 5.5.5 以後,若是產生一個負數,則會產生一個錯誤 ERROR 1690。io
關於SQL_MODE
SQL_MODE默認爲空,有不少的選項,建議在生產環境中設置成嚴格的MODE,這樣能夠在運維期間避免不少麻煩。class