'0000-00-00 00:00:00' 不能表示为 java.sql。时间戳错误

2022-08-31 07:29:53

我有一个包含日期的数据库表

 (`date` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00'). 

我正在使用MySQL。从程序中,有时数据在没有日期的情况下传递到数据库。因此,当使用日期列调用表数据时,日期值会自动分配给它给出错误0000-00-00 00:00:00

...'0000-00-00 00:00:00' can not be represented as java.sql.Timestamp.......

我试图在插入数据时将空值传递给日期,但它被分配给当前时间。

有什么方法可以在不更改表结构的情况下获得吗?ResultSet


答案 1

您可以直接在数据源配置中使用此 JDBC URL:

jdbc:mysql://yourserver:3306/yourdatabase?zeroDateTimeBehavior=convertToNull


答案 2

“日期”'0000-00-00“是否是有效的”日期“与问题无关。“只是改变数据库”很少是一个可行的解决方案。

事实:

  • MySQL允许值为零的日期。
  • 这个“功能”在其他语言中被广泛使用。

因此,如果我“只是更改数据库”,数千行PHP代码将中断。

Java程序员需要接受MySQL零日期当其他语言依赖这个“功能”时,他们需要将零日期放回数据库中。

连接到MySQL的程序员需要处理null和0000-00-00以及有效日期。将 0000-00-00 更改为 null 不是一个可行的选项,因为这样就无法再确定写入数据库的日期是否应为 0000-00-00。

对于0000-00-00,我建议以字符串形式检查日期值,然后将其更改为(“y”,1)或(“yyyy-MM-dd”,0001-01-01),或更改为任何无效的MySQL日期(小于1000年,iirc)。MySQL还有另一个“功能”:低日期自动转换为0000-00-00。

我意识到我的建议是一个笨拙的。但MySQL的日期处理也是如此。两个笨拙并不能使它正确。事实是,许多程序员将不得不永远处理MySQL零日期。