问题
我有一个包含日期的数据库表
(`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 热门回答(249 赞)
你可以直接在数据源配置中使用此JDBC URL:
jdbc:mysql:// yourserver:3306 / yourdatabase?zeroDateTimeBehavior = convertToNull
#2 热门回答(10 赞)
"date"'0000-00-00"是否是有效的"日期"与问题无关。"只是改变数据库"很少是一个可行的解决方案。
事实:
- MySQL允许日期值为零。
- 此"功能"广泛用于其他语言。
因此,如果我"只是更改数据库",数千行PHP代码将会中断。
Java程序员需要接受MySQL零日期,并且当其他语言依赖于这个"特性"时,他们需要将零日期重新放回数据库。
连接MySQL的程序员需要处理null和0000-00-00以及有效日期。将0000-00-00变为null并不是一个可行的选择,因为那样你就不能再确定日期是否应该是用于写回数据库的。
对于0000-00-00,我建议将日期值检查为字符串,然后将其更改为("y",1)或("yyyy-MM-dd",0001-01-01),或任何无效MySQL日期(不到1000年,iirc)。 MySQL有另一个"功能":低日期会自动转换为0000-00-00。
我意识到我的建议是一个kludge。但MySQL的日期处理也是如此。并且两个kludges没有做对。事实是,许多程序员必须处理MySQL零日期。
#3 热门回答(7 赞)
而不是使用伪日期,如0000-00-00 00:00:00
或0001-01-01 00:00:00
(后者应该被接受,因为它是一个有效的日期),更改你的数据库架构,以允许NULL
值。
ALTER TABLE table_name MODIFY COLUMN date TIMESTAMP NULL