1. 程式人生 > >Mysql 時間 '0000-00-00'異常解決

Mysql 時間 '0000-00-00'異常解決

在spring+mybatis專案中,查詢mysql資料庫遇到一個問題:

java.sql.SQLException:Value '0000-00-00' can not be represented as java.sql.Date

分析看了一下原因應該是mybatis將date型別的欄位轉成String型別時,遇到date型別欄位為'0000-00-00',轉換不了,所以丟擲該異常

在網上查了一下資料:mysql資料庫的date、timestamp等時間型別預設為'0000-00-00'

解決方案1:資料庫連線url增加引數zeroDateTimeBehavior=convertToNull或者round,可以講預設的'0000-00-00'轉換為其他值;

想起之前還碰到過一個問題:以前在DB2中事件型別預設值是’1900-00-00‘,在mysql中卻一直報錯,經查詢發現是mysql的時間型別預設值必須從’1970-00-00‘開始。

另外mysql的時間型別定義時如果不指明為NULL,則預設為not null,產生一個預設值即'0000-00-00'。

所以上面的問題還有兩種解決方案:

解決方案2:定義時間型別時給出預設值,例如 date not null default '1970-00-00';

解決方案3:定義時間型別時預設為null,例如 date  null ;

備註:

官網給出timestamp型別預設值default 範圍是 '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC

在中國,由於時區問題為1970-01-01 08:00:01 to 2038-01-19 11:14:07