Java 将19999年保存到数据库中

Java 将19999年保存到数据库中,java,mysql,Java,Mysql,我有以下日期值,希望保留在MySQL数据库中。表字段是不允许保留此值的DATETIME数据类型。在尝试插入带有的记录时,我收到以下错误消息: 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 这不是Java中的限制,而是MySQL中的限制。MySQL日期类型不会太久远() 可以切换数据库,也可以通过存储您自己转

我有以下日期值,希望保留在MySQL数据库中。表字段是不允许保留此值的DATETIME数据类型。在尝试插入带有的记录时,我收到以下错误消息:

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

这不是Java中的限制,而是MySQL中的限制。MySQL日期类型不会太久远()

可以切换数据库,也可以通过存储您自己转换的适当计数器来实现


如果您切换数据库,PostgreSQL 9会走这么远,然后是一些(公元294276年)。有关详细信息,请参阅。

这不是Java中的限制,而是MySQL中的限制。MySQL日期类型不会太久远()

可以切换数据库,也可以通过存储您自己转换的适当计数器来实现


如果您切换数据库,PostgreSQL 9会走这么远,然后是一些(公元294276年)。有关详细信息,请参阅。

人们可能希望在9999年之后再过一年,这是有原因的。例如,如果你在计算天文事件,你可能想知道哈雷彗星将返回地球的下1000次。或者,如果你对神秘的宗教日历着迷,你可能会对犹太节日的周期感兴趣,或者斋月从圣诞节开始的频率感兴趣

不幸的是,出于这个目的,大多数数据库的设计都考虑到了业务需求,而不是天文学、考古学或其他领域。如果您确实需要超出范围的日期,我建议您设置自己的日历系统。一种方法是创建一个
bigint
列,并计算自某个规范日期(如“0001-01-01”)起的天数。另一种方法是以“yyyy-MM-DD”格式将日期存储为字符串


或者,也许你只是有一个打字错误,1999年就足够了。

有一些原因可以解释为什么你想要9999年之后的一年。例如,如果你在计算天文事件,你可能想知道哈雷彗星将返回地球的下1000次。或者,如果你对神秘的宗教日历着迷,你可能会对犹太节日的周期感兴趣,或者斋月从圣诞节开始的频率感兴趣

不幸的是,出于这个目的,大多数数据库的设计都考虑到了业务需求,而不是天文学、考古学或其他领域。如果您确实需要超出范围的日期,我建议您设置自己的日历系统。一种方法是创建一个
bigint
列,并计算自某个规范日期(如“0001-01-01”)起的天数。另一种方法是以“yyyy-MM-DD”格式将日期存储为字符串


或者,也许你只是有一个打字错误,1999年就足够了。

Wow。您希望您的系统会运行一段时间。我可以用某种方式将19999取整/截断为Java中有效的DATETIME year吗?对列使用您自己的类型,一些长的数字类型,并保留时间戳value@Bathsheba如果代码写得好,你可能会惊讶于它能活多久。你确定要19999年吗?9999还不够大吗?哇。您希望您的系统会运行一段时间。我可以用某种方式将19999取整/截断为Java中有效的DATETIME year吗?对列使用您自己的类型,一些长的数字类型,并保留时间戳value@Bathsheba如果代码写得好,你可能会惊讶于它能活多久。你确定要19999年吗?9999还不够大吗?雄辩的回答,尽管你只需要几秒钟就可以完成这样的活动。岁月、日子等并不是一成不变的:昨天的闰秒是这一切的缩影。@Bathsheba。那些对神秘的日历问题感兴趣的人可能会对约翰·斯基特的最高职位感兴趣:。这是在一个更短的时间范围内。雄辩的回答,尽管你只需要几秒钟就可以完成这样的活动。岁月、日子等并不是一成不变的:昨天的闰秒是这一切的缩影。@Bathsheba。那些对神秘的日历问题感兴趣的人可能会对约翰·斯基特的最高职位感兴趣:。这是在更短的时间范围内。请注意,您也可以将日期与表示数据库可容纳的最大日期的已知日期进行比较,如果大于该日期,请使用已知日期,请注意,您也可以将日期与表示数据库可容纳的最大日期的已知日期进行比较,如果大于该值,则使用已知日期,