博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mysql数据库时间字段CURRENT_TIME问题
阅读量:6035 次
发布时间:2019-06-20

本文共 1277 字,大约阅读时间需要 4 分钟。

hot3.png

一、背景

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

下面是报错:

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

二、分析问题

  1. 这是一个数据库表的create_time字段,出现值:'0000-00-00 00:00:00'。
  2. 查看了数据库,最新记录create_time字段时间都是正确的,某个时间之前的记录create_time字段时间都是'0000-00-00 00:00:00'。
  3. 先更新错误的历史记录字段值。
  4. 这个问题之前也碰到过,看来这个坑很容易出现了。

三、 重现问题

  1. 新建一个表
CREATE TABLE `a` (  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,  `name` varchar(100) DEFAULT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  1. 插入两条数据
INSERT INTO a(id, name) VALUES(1, "张三");INSERT INTO a(id, name) VALUES(2, "李四");

插入两条数据图片

  1. 新建两个字段
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;

两个字段值对比图

  1. 然后插入一条记录
INSERT INTO a(id, name) VALUES(3, "王五");

插入一条记录结果图

  1. 然后更新一条记录
UPDATE a SET name="马六" WHERE id = 3;

更新一条记录结果图

四、结论

  1. "DEFAULT CURRENT_TIMESTAMP":在“创建时”,将字段值初始化为当前时间; "ON UPDATE CURRENT_TIMESTAMP":在“更新时”,将字段更新为当前时间,而在“创建时”,因为NOT NULL,所以设为了“0000-00-00 00:00:00”,有些版本mysql是不允许存在超过一个的timestamp类型字段,datetime类型呢,则不允许“0000-00-00 00:00:00”这样的默认值。
  2. 一般来说,create_time字段设置为 “DEFAULT CURRENT_TIMESTAMP”,update_time字段可以设置为“on update CURRENT_TIMESTAMP”

转载于:https://my.oschina.net/ijustdoit/blog/518072

你可能感兴趣的文章
存储过程中调用webservice
查看>>
神奇语言 python 初识函数
查看>>
Windows安装Composer出现【Composer Security Warning】警告
查看>>
四 指针与数组 五 函数
查看>>
硬盘空间满了
查看>>
dutacm.club Water Problem(矩阵快速幂)
查看>>
深入JVM内核--GC算法和种类
查看>>
iOS的AssetsLibrary框架访问所有相片
查看>>
读书笔记三
查看>>
数论 - 最小乘法逆元
查看>>
企业架构研究总结(22)——TOGAF架构开发方法(ADM)之信息系统架构阶段
查看>>
接口测试(三)--HTTP协议简介
查看>>
周志华《机器学习》课后答案——第4章.决策树
查看>>
frameset分帧问题
查看>>
特殊样式:ime-mode禁汉字,tabindex焦点
查看>>
linux
查看>>
Layout父元素点击不到的解决办法
查看>>
【面试次体验】堆糖前端开发实习生
查看>>
基于apache实现负载均衡调度请求至后端tomcat服务器集群的实现
查看>>
C#+QQEmail自动发送邮件
查看>>