热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysqlcurrent_time_mysql数据库时间字段CURRENT_TIME问题

###一、背景进入产品迭代阶段,修改数据库字段是难免的。除了我们能够想到的,新增字段,一定要设置为“允许为空”或者设置“默认值”ÿ

###一、背景

进入产品迭代阶段,修改数据库字段是难免的。除了我们能够想到的,新增字段,一定要设置为“允许为空”或者设置“默认值”,当涉及到mysql的时间字段时,也要格外小心。

下面是报错:

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

###二、分析问题

这是一个数据库表的create_time字段,出现值:'0000-00-00 00:00:00'。

查看了数据库,最新记录create_time字段时间都是正确的,某个时间之前的记录create_time字段时间都是'0000-00-00 00:00:00'。

先更新错误的历史记录字段值。

这个问题之前也碰到过,看来这个坑很容易出现了。

###三、 重现问题

新建一个表

CREATE TABLE `a` (

`id` int(10) unsigned NOT NULL AUTO_INCREMENT,

`name` varchar(100) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

插入两条数据

INSERT INTO a(id, name) VALUES(1, "张三");

INSERT INTO a(id, name) VALUES(2, "李四");

0818b9ca8b590ca3270a3433284dd417.png

新建两个字段

ALTER Table a ADD COLUMN create_time timestamp not null DEFAULT CURRENT_TIMESTAMP;

ALTER Table a ADD COLUMN update_time timestamp not null ON UPDATE CURRENT_TIMESTAMP;

0818b9ca8b590ca3270a3433284dd417.png

然后插入一条记录

INSERT INTO a(id, name) VALUES(3, "王五");

0818b9ca8b590ca3270a3433284dd417.png

然后更新一条记录

UPDATE a SET name="马六" WHERE id = 3;

0818b9ca8b590ca3270a3433284dd417.png

###四、结论

"DEFAULT CURRENT_TIMESTAMP":在“创建时”,将字段值初始化为当前时间; "ON UPDATE CURRENT_TIMESTAMP":在“更新时”,将字段更新为当前时间,而在“创建时”,设为“0000-00-00 00:00:00”。

一般来说,create_time字段设置为 “DEFAULT CURRENT_TIMESTAMP”,update_time字段可以设置为“on update CURRENT_TIMESTAMP”



推荐阅读
author-avatar
ha遗忘的密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有