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

本文介绍了解决MySQL中timestamp字段出现'0000-00-00 00:00:00'的问题方法,包括配置URL参数和转换为long类型。同时探讨了timestamp的插入范围、与时区的关系及与其他数据类型的对比。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

 

解决办法:

1) 配置URL 

jdbc:mysql://127.0.0.1:3306/test?zeroDateTimeBehavior=convertToNull 

2) 需要转换为long使用

public static long parseTimestampToLong (ResultSet rs, String column) throws SQLException {
	try {
		Timestamp ts = rs.getTimestamp(column);
		if (ts == null) {
			return 0;
		}
		
		return ts.getTime();
	}
	catch (SQLException e) {
		if (e.getMessage() != null && e.getMessage().indexOf("not found") > -1) {
			// 该字段找不到
			throw e;
		}
		return 0;
	}
}

 

其它:

1) timestamp 插入范围

    String: 0000-00-00 00:00:00, ['1970-01-01 08:00:01', '2038-01-19 11:14:07']

    long:    [0, 2147483647000]

    0 -> 0000-00-00 00:00:00

    1 ->  1970-01-01 08:00:01

    2147483647000 -> '2038-01-19 11:14:07'

2) timestamp 值以UTC格式保存, 与时区有关

    更改时区后,select出来后的值根据时区变化增减(win7下必须重启MySQL)

3) DateTime & Timestamp

DateTimeTimestamp
8个字节储存4个字节储存
与时区无关跟随时区变化(值以UTC格式保存,select时候绑定时区)

4) int & long

    int 存储时间  上限 2038-01-19 11:14:07 (转换时候java.util.Date需要乘以1000L)

    long 存储时间  无上限

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值