前言

今天遇到了一个关于Mysql Timestamp的问题。项目在之前的部署和应用过程中都没有出现,异常出现的也很突然。

  • 异常描述

    • com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect datetime value: '0000-00-00 00:00:00' for column 'update_time' at row 1
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3974)
      at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3912)
      at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2530)
      at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2683)
      at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2486)
      at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1858)
      at com.mysql.jdbc.PreparedStatement.execute(PreparedStatement.java:1197)
      at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2931)
      at com.alibaba.druid.filter.FilterEventAdapter.preparedStatement_execute(FilterEventAdapter.java:440)
      at com.alibaba.druid.filter.FilterChainImpl.preparedStatement_execute(FilterChainImpl.java:2929)

在数据库的表中有个 timestamp update_time,DDL如下:

  `update_time` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  • 异常场景描述

    • 在使用系统后台CRUD功能时莫名的出现上面的BUG,导致后台的CRUD功能不能正常使用。在网上查了一些资料大体上有以下几种解决方案:

      • 有Mysql升级引起的jar包冲突,替换较高版本mysql-connector-x-bin.jar即可。
      • 修改数据库字段将其默认为String即可

由于项目是由SpringBoot构建的,无法单独分离或者指定mysql-connector-java的版本,所以只能修改数据库表字段信息,但由于表数据已成型不能轻易修改表字段属性,因此修改了表字段 update_time 的DDL,如下所示:

  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  • 异常出现分析
    Mysql 定义的 timestamp 修饰的字段在 CURRENT_TIMESTAMP 和 ON UPDATE CURRENT_TIMESTAMP 在使用场景下的不同。参考文档

StackFlow 之 MYSQL之timestamp相关推荐

  1. MYSQL中TIMESTAMP类型的默认值

    MYSQL中TIMESTAMP类型的默认值    MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...

  2. timestamp mysql php_PHP和Mysql的Timestamp互换

    在mysql中有三种时间字段类型: DATETIME,DATE和TIMESTAMP. DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据: DATE则是只有年月日以YYYY ...

  3. MySQL的timestamp类型存储时间范围为什么是2038年之内

    MySQL的timestamp类型,存储的是一个整型int数据,由于int是有大小范围的,最多存大约21亿的数据,timestamp存储的数据所以被限制在了1970~2038年之内.

  4. mysql的timestamp类型_MySQL数据库中的timestamp类型与时区

    MySQL的timestamp类型时间范围between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出这个范围则值记录为'0000-00-00  ...

  5. MySQL的timestamp字段可以使用的范围是多少

    还是之前工作中遇到的一个小问题.我在做一个收据采集的程序,需要记录起始时间和结束时间,在数据库中是用timestamp字段来保存的,有些情况下不存在起始时间,此时就需要设置一个默认的起始时间,当初想着 ...

  6. mysql添加timestamp有什么用_mysql中timestamp的使用

    mysql中timestamp的使用 mysql> CREATE TABLE t1 ( ->   id mediumint(9) NOT NULL auto_increment, -> ...

  7. mysql中timestamp的自动生成与更新

    转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: -------- ...

  8. MySQL的TIMESTAMP数据类型

    我们可能经常用数据库中的日期和时间类型,但他能存什么精度的,有什么坑,能怎么使用,其实还是很讲究的. Oracle数据库关于日期类型的历史文章, <Oracle时间戳类型内部表示的转换方式> ...

  9. MySQL 里 timestamp 的默认值设置

    MySQL里timestamp的默认值设置 timestamp 有以下几种默认值设置: 1.timestamp :表示该字段在插入和更新时都不会自动设置为当前时间. 2.timestamp defau ...

最新文章

  1. ACL 2021 | 腾讯AI Lab、港中文杰出论文:用单语记忆实现高性能NMT
  2. td 字典表_数据库怎么设计字典表
  3. java 提高性能的 容器库_容器隔离性带来的问题--容器化Java应用比虚机启动速度慢...
  4. [深度学习TF2][RNN-NPL数据预处理] -Tokenizer函数
  5. 《敏捷软件开发》读书笔记 (3)--敏捷语录
  6. windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放...
  7. MyCat分布式数据库集群架构工作笔记0007---Mycat登录
  8. 互联网年终福利大盘点,告诉你过年的正确姿势!
  9. 7-9 主从复制常见问题
  10. 【ACL2020放榜!】事件抽取、关系抽取、NER、Few-Shot 相关论文整理
  11. oracle修复工具下载,Oracle数据库修复工具Stellar Phoenix Database Repair for Oracle
  12. 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (作者:剽悍一小兔)第七、八、九节学习随笔
  13. CSP 2018-9-4 再卖菜 搜索 + 剪枝
  14. maven-jar包的来源
  15. 《中文文本信息抽取模型与方法研究》5:基于论元结构的事件要素及其角色识别
  16. Scrollbar样式介绍
  17. OpenGL 动画的制作
  18. 【调剂】2020西南科技大学微系统中心招收硕士调剂硕士生
  19. 软件测试的背景和前期准备
  20. VBA 单一单元格的多行内容拆分为多行

热门文章

  1. 【NVIDIA】Jetson Xavier NX镜像烧录
  2. 手把手教你使用Python打造一个智能搜索淘宝商品!
  3. 2022加氢工艺题库及模拟考试
  4. 人工智能的中国式崛起
  5. 低年级趣味写话——绘本故事《小猪变形计》
  6. mΩ、kV的电力单位为什么是大小写组合的?
  7. 生成微信小程序发布上线后的二维码 、获取微信小程序二维码、微信小程序二维码如何生成?
  8. spring aware的使用;spring aware 各种接口的作用解析
  9. 大数据发力 LTE端到端KPI指标可精细优化
  10. 如何用python赚钱 悟空问答-普通大学生可以做点什么兼职赚钱?