2015-07-01 117 views
0

我有以下日期值,即希望保留在MySQL數據庫中。表字段是DATETIME數據類型,不允許保留這樣的值。嘗試插入記錄時出現以下錯誤消息:將19999年保存到數據庫中

Data truncation: Incorrect datetime value: '19999-12-21 01:00:00' 

Tue Dec 21 01:00:00 EET 19999 
19999-12-21 01:00:00 
+0

你嘗試了什麼? –

+3

哇。你期待你的系統在那裏待一段時間。 – Bathsheba

+0

可以以某種方式在Java中將/ 19999截斷爲有效的DATETIME年嗎? –

回答

2

這不是Java中的限制,而是MySQL中的限制。 MySQL日期類型不會走得太遠(https://dev.mysql.com/doc/refman/5.1/en/datetime.html

要麼切換數據庫,要麼通過存儲您自己進行轉換的適當計數器自行完成。

如果您切換數據庫,PostgreSQL 9會走這麼遠,然後到一些(294276 AD)。詳情請參閱http://www.postgresql.org/docs/9.1/static/datatype-datetime.html

+1

請注意,您也可以將日期與表示數據庫可容納的最大日期的已知日期進行比較,如果大於該值,則使用已知日期, –

+0

正確,在java中沒有限制。這是mysql中的限制 –

4

爲什麼人們可能想要超過9999年呢?例如,如果你正在計算天文事件,你可能想知道哈雷彗星將要返回地球的下一千倍。或者,如果你對神祕的宗教日曆着迷,那麼猶太節日在整個季節的週期或齋月開始聖誕節的頻率可能會讓你感到有趣。

對此不幸的是,大多數數據庫設計與業務需要記住,而不是天文學或考古學或其他領域。如果你真的需要超出範圍的日期,我會建議設置自己的日曆系統。一種方法是創建bigint列並計算自某些規範日期(例如「0001-01-01」)以來的天數。另一種是將日期作爲字符串以'YYYYY-MM-DD'格式存儲。或者,也許你只是有一個錯字,1999年就足夠了。

+0

雄辯的答案,儘管你只需使用秒來處理這些事件。幾年,幾天等都不是恆定的:昨天的閏秒就是這個縮影。 – Bathsheba

+0

@Bathsheba。 。 。那些對奧術日曆問題感興趣的人可能會對John Skeet的頂級帖子感興趣:http://stackoverflow.com/questions/6841333/why-is-subtracting-these-two-times-in-1927-giving-a-strange-結果/ 6841479#6841479。而且這個時間要短得多。 –