无法将“0000-00-00 00:00:00”转换为 TIMESTAMP
Posted
技术标签:
【中文标题】无法将“0000-00-00 00:00:00”转换为 TIMESTAMP【英文标题】:Cannot convert '0000-00-00 00:00:00' to TIMESTAMP 【发布时间】:2010-11-24 17:06:36 【问题描述】:字段定义
/** Date. */
@Column(columnDefinition = "datetime")
private Date date;
二传手
public void setDate(final Date date)
DateFormat dfmt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try
this.date = dfmt.parse(dfmt.format(date));
catch (ParseException e)
// TODO Auto-generated catch block
e.printStackTrace();
有人知道如何将“零日期”转换为正确的值吗? 因为我有错误:
Cannot convert value '0000-00-00 00:00:00' from column 13 to TIMESTAMP
即使我像这样设置“默认”字段和设置器:
/** Date. */
@Column
private Date date;
public void setDate(final Date date)
this.date = date;
我还是会遇到同样的问题....
【问题讨论】:
在我看来 0000-00-00 00:00:00 并不对应于任何实际的时间点,因此它基本上不能转换为时间戳值。你想要的行为是什么?是否要将无效的 ISO 日期转换为默认值? 从表中获取数据(表中不止一列)后的下一步是将其写入 XML 但是(!)我不会将日期值写入 XML,所以我只是想从表中获取数据,然后我将永远不会调用 getDate() 方法。 "你想让它把无效的 ISO 日期转换成默认值吗?" - 是的,如果可能的话…… 【参考方案1】:我将在这里大胆猜测您正在使用 mysql :-) 它使用“零日期”作为 special placeholder - 不幸的是,默认情况下 JDBC 无法处理它们。
解决方案是将“zeroDateTimeBehavior=convertToNull”指定为 MySQL 连接的参数(在数据源 URL 中或作为附加属性),例如:
jdbc:mysql://localhost/myDatabase?zeroDateTimeBehavior=convertToNull
这将导致所有这些值都被检索为 NULL。
【讨论】:
只是附注 - 这将在读取期间将零日期转换为空值,但在保存期间不会将空值转换为零。我还没有找到通过休眠将“0000-00-00”保存到数据库中的方法。 @serg555 - 你是对的。不过,我不得不问一下——为什么要将“0000-00-00”保存到数据库中? NULL 的存在正是出于这个原因,这整个“0000-00-00”可憎不过是痛苦。 出于同样的原因,我想读取零日期 - 系统就是这样设计的,我无法控制它。 @ChssPly76 非常感谢。【参考方案2】:我不明白您的代码中的要点,您在其中格式化然后再次解析日期。这似乎是一个相同的操作。也许你可以详细说明?
如果你想给日期一个默认值,你可以这样做:
/** Jan 1, 1970 ; first moment in time in Java */
private static final Date NO_DATE = new Date(0L);
private Date date;
public void setDate(final Date date)
if (date == null)
this.date = NO_DATE;
else
this.date = date;
注意:注解是可选的,这里我没有添加。
在此代码中,您可以将所需的内容替换为条件和默认值。
您还可以添加一个类似的设置器,它接受一个字符串参数,并检查您的特殊“00000...”值。这将允许使用日期或字符串设置字段。
【讨论】:
以上是关于无法将“0000-00-00 00:00:00”转换为 TIMESTAMP的主要内容,如果未能解决你的问题,请参考以下文章
将 C# 日期时间转换为 0000-00-00 00:00:00 到 MySQL
MySql5.7 datetime 默认值为‘0000-00-00 00:00:00'值无法创建问题解决
MySQL Workbench - 表数据导入向导将所有日期时间对象写入 0000-00-00 00:00:00
报错 java.sql.SQLException: Value '0000-00-00 00:00:00' can not be represented as java.sql.Tim
如何在java中处理具有值“0000-00-00 00:00:00”的日期[重复]
Incorrect datetime value: '0000-00-00 00:00:00' for column 'addtime' at row问题解决(示例代码