StackFlow 之 MYSQL之timestamp
前言
今天遇到了一个关于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即可
- …
- 在使用系统后台CRUD功能时莫名的出现上面的BUG,导致后台的CRUD功能不能正常使用。在网上查了一些资料大体上有以下几种解决方案:
由于项目是由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相关推荐
- MYSQL中TIMESTAMP类型的默认值
MYSQL中TIMESTAMP类型的默认值 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: ---------- ...
- timestamp mysql php_PHP和Mysql的Timestamp互换
在mysql中有三种时间字段类型: DATETIME,DATE和TIMESTAMP. DATETIME以YYYY-MM-DD HH:MM:SS格式的字符串来保存数据: DATE则是只有年月日以YYYY ...
- MySQL的timestamp类型存储时间范围为什么是2038年之内
MySQL的timestamp类型,存储的是一个整型int数据,由于int是有大小范围的,最多存大约21亿的数据,timestamp存储的数据所以被限制在了1970~2038年之内.
- mysql的timestamp类型_MySQL数据库中的timestamp类型与时区
MySQL的timestamp类型时间范围between '1970-01-01 00:00:01' and '2038-01-19 03:14:07',超出这个范围则值记录为'0000-00-00 ...
- MySQL的timestamp字段可以使用的范围是多少
还是之前工作中遇到的一个小问题.我在做一个收据采集的程序,需要记录起始时间和结束时间,在数据库中是用timestamp字段来保存的,有些情况下不存在起始时间,此时就需要设置一个默认的起始时间,当初想着 ...
- mysql添加timestamp有什么用_mysql中timestamp的使用
mysql中timestamp的使用 mysql> CREATE TABLE t1 ( -> id mediumint(9) NOT NULL auto_increment, -> ...
- mysql中timestamp的自动生成与更新
转自:mysql中timestamp的自动生成与更新 MYSQL中TIMESTAMP类型可以设定默认值,就像其他类型一样. 1.自动UPDATE 和INSERT 到当前的时间: 表: -------- ...
- MySQL的TIMESTAMP数据类型
我们可能经常用数据库中的日期和时间类型,但他能存什么精度的,有什么坑,能怎么使用,其实还是很讲究的. Oracle数据库关于日期类型的历史文章, <Oracle时间戳类型内部表示的转换方式> ...
- MySQL 里 timestamp 的默认值设置
MySQL里timestamp的默认值设置 timestamp 有以下几种默认值设置: 1.timestamp :表示该字段在插入和更新时都不会自动设置为当前时间. 2.timestamp defau ...
最新文章
- ACL 2021 | 腾讯AI Lab、港中文杰出论文:用单语记忆实现高性能NMT
- td 字典表_数据库怎么设计字典表
- java 提高性能的 容器库_容器隔离性带来的问题--容器化Java应用比虚机启动速度慢...
- [深度学习TF2][RNN-NPL数据预处理] -Tokenizer函数
- 《敏捷软件开发》读书笔记 (3)--敏捷语录
- windows8 开发教程 教你制作 多点触控Helper可将任意容器内任意对象进行多点缩放...
- MyCat分布式数据库集群架构工作笔记0007---Mycat登录
- 互联网年终福利大盘点,告诉你过年的正确姿势!
- 7-9 主从复制常见问题
- 【ACL2020放榜!】事件抽取、关系抽取、NER、Few-Shot 相关论文整理
- oracle修复工具下载,Oracle数据库修复工具Stellar Phoenix Database Repair for Oracle
- 【手把手】JavaWeb 入门级项目实战 -- 文章发布系统 (作者:剽悍一小兔)第七、八、九节学习随笔
- CSP 2018-9-4 再卖菜 搜索 + 剪枝
- maven-jar包的来源
- 《中文文本信息抽取模型与方法研究》5:基于论元结构的事件要素及其角色识别
- Scrollbar样式介绍
- OpenGL 动画的制作
- 【调剂】2020西南科技大学微系统中心招收硕士调剂硕士生
- 软件测试的背景和前期准备
- VBA 单一单元格的多行内容拆分为多行