您好,登錄后才能下訂單哦!
Mysql運(yùn)行模式及1690錯誤處理
MySQL said: Documentation
1690 - BIGINT UNSIGNED value is out of range in
經(jīng)過查詢,發(fā)現(xiàn)這個錯誤的原因是兩個時間字段進(jìn)行減法運(yùn)算時,如果有一個時間為0000-00-00時造成的,根本原因是因?yàn)檫@樣減法的結(jié)果會超過Mysql數(shù)值字段的范圍,從而觸發(fā)1690報錯。
ERROR 1690 Out-of-Range
當(dāng)Mysql中的數(shù)字字段存儲了一個超過允許范圍的數(shù)字時,會觸發(fā)1690 Out of Range錯誤,是否觸發(fā)錯誤取決于SQL運(yùn)行時的模式:
當(dāng)標(biāo)準(zhǔn) Standar Mode 或 Strict Mode 運(yùn)行時,數(shù)據(jù)插入會失敗
當(dāng)非限制模式 No Restrictive 運(yùn)行時,Mysql將數(shù)值轉(zhuǎn)化為范圍允許內(nèi)的最大或最小值進(jìn)行存儲
解決方法
SET sql_mode = 'NO_UNSIGNED_SUBTRACTION';
在進(jìn)行計算時,首先執(zhí)行上面的語句,可以避免減法運(yùn)算過程中的錯誤。在Mysql文檔中,明確指出兩個整數(shù)進(jìn)行相減運(yùn)算的結(jié)果是一個無符號數(shù),在Mysql 5.5.5 之前,如果產(chǎn)生一個負(fù)數(shù),mysql會將這個數(shù)轉(zhuǎn)換為一個最大的數(shù)值。
自Mysql 5.5.5 之后,如果產(chǎn)生一個負(fù)數(shù),則會產(chǎn)生一個錯誤 ERROR 1690。
關(guān)于SQL_MODE
SQL_MODE默認(rèn)為空,有很多的選項,建議在生產(chǎn)環(huán)境中設(shè)置成嚴(yán)格的MODE,這樣可以在運(yùn)維期間避免很多麻煩。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。