专栏首页大数据-数据人生MySql timestamp类型的bug

MySql timestamp类型的bug

       最近在使用MySql数据库的时候,用了timestamp类型,没有指定默认类型。发现在使用MyBatis操作数据库的时候,有一个字段的值为null确被修改了。调试程序,最终发现:原来MySql这里有坑,原始建表语句如下:

create table if not exists rep_reconciliation_task(
    task_id varchar(32) comment '任务ID',
    rec_code varchar(50) comment '对账类型',
    start_time timestamp comment '批量启动时间',
    actual_start_time timestamp comment '实际启动时间',
    end_time timestamp comment '批量结束时间',
    warn_time varchar(20) comment '批量告警时间',
    rec_sql varchar(10000) comment '对账逻辑SQL',
    rec_date char(8) comment '对账日期',
    update_time timestamp comment '更新时间',
    task_status char(1) comment '状态:I-初始化,W-批量等待前置任务中,P-批量运行中,S-成功,F-批量失败',
    PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='对账任务表';

             建表后结果如下:

| rep_reconciliation_task | CREATE TABLE `rep_reconciliation_task` (
  `task_id` varchar(32) NOT NULL DEFAULT '' COMMENT '任务ID',
  `rec_code` varchar(50) DEFAULT NULL COMMENT '对账类型',
  `start_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '批量启动时间',
  `actual_start_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '实际启动时间',
  `end_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '批量结束时间',
  `warn_time` varchar(20) DEFAULT NULL COMMENT '批量告警时间',
  `rec_sql` varchar(10000) DEFAULT NULL COMMENT '对账逻辑SQL',
  `rec_date` char(8) DEFAULT NULL COMMENT '对账日期',
  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间',
  `task_status` char(1) DEFAULT NULL COMMENT '状态:I-初始化,W-批量等待前置任务中,P-批量运行中,S-成功,F-批量失败',
  PRIMARY KEY (`task_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='对账任务表'                                  

          该表里面有start_time、acual_start_time、end_time ,updatetime 4个timestamp类型,都是默认创建的,最后MySql解析的结果,却只给start_time加上了 default_current_timestamp on update current_timestamp。和DBA交流过,估摸着应该是MySql内核的bug。

         解决办法其实很简单,指定一个默认值就OK了:NOT NULL DEFAULT '0000-00-00 00:00:00' comment '批量启动时间'

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • javascript写在head和body里的区别

    2、一般这样写:;如果这样写:<script language="javascript">是不标准的,IE能认,但是别的就不知道了。

    幽鸿
  • 第4章 配置Solr

    到目前为止,你已经提出了什么信仰,没有学习Solr是如何工作的。我们会改变,在这一章和下一个通过学习如何配置和配置设置如何影响Solr的行为。您将看到,Solr...

    幽鸿
  • Spring MVC使用AOP拦截Controller

    接着上篇文章《SpringMVC快速使用AOP》继续,如果我们需要对Controller进行切面编程,加上注解后,会发现我们的LogAspect竟然无法拦截到C...

    幽鸿
  • Log4j 2.0在开发中的高级使用详解—配置简单的文件输出(四)

    在log4j 1.x的版本中,我们想将日志输出的文件中,需要很复杂的配置。这点已经在2.0的版本中得到了大大的改善。 简单...

    业余草
  • 设计谜题

    王兵
  • C# Int 类型线程不安全

    之前统计报表算法做了一个优化,一个查询二十分钟导致客户端超时,优化到只需要5秒钟。后来发现for循环里数据合并的时候耗时,就用并行做优化。但是发现并行后丢居然数...

    KurtNiu
  • App环境分离的实现:Android篇

    我在App架构经验总结中有简单提到环境分离的实现方案,但没有深入讲实现细节。本系列则打算用两篇文章分别详细讲讲Android和iOS环境分离的具体实现,本篇则先...

    Keegan小钢
  • 破洞牛仔裤中的几何学:简单理解万有覆叠问题

    「嘿,我的牛仔裤破洞了。你能帮我补一补吗?」你的朋友正发消息向你寻求帮助,他知道你的针线活做得很不错。

    机器之心
  • 懒人福音——渗透测试单行化

    One-Lin3r是一个简单的轻量级框架,它的设计灵感来源于Metasploit中的web-delivery模块。

    网e渗透安全部
  • 课时39:类与对象:拾遗

    Python的特性其实还支持另外一种很流行的编程模式:Mixin.【扩展阅读】Mixin编程机制(https://fishc.com.cn/forum.php?...

    py3study

扫码关注云+社区

领取腾讯云代金券