文档章节

准确记录记录插入数据库的时间

阿信sxq
 阿信sxq
发布于 2017/06/20 16:02
字数 612
阅读 144
收藏 0

数据库记录时间,首先想到使用timestamp类型的字段,然后配上CURRENT_TIMESTAMP进行记录,然而,那是不行的。

最近就遇到一个因为使用timestamp造成的时间显示“异常”的问题。

出现的问题

原先使用

CREATE TABLE t_log (
    id          int(11)         NOT NULL AUTO_INCREMENT,
    log_time    TIMESTAMP       DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (id)
);

来创建表,保存的数据也正确。

但是由于程序运行时系统会切换时区,就会造成在不同时区的时候,同一条记录会显示出不同的值出来,
这个是由于timestamp这个类型的特性造成的,会自动根据当前时区调整显示。

时间相关的类型就那么多,要同时保存日期和时间,考虑切换到使用datetime来存储,同时使用函数now()的值来作为默认值,实现自动填充值。

CREATE TABLE t_log (
    id          int(11)         NOT NULL AUTO_INCREMENT,
    log_time    DATETIME        DEFAULT NOW(),
    PRIMARY KEY (id)
);

在本机运行正常,但是放到具体环境的时候就不能正常工作了。

问题分析

经过检查,具体环境使用的 mysql 版本是 5.5 的版本,而本机试用的是 mariadb 的 10.1 的版本,相当于 mysql 的 5.6 ,一搜索才发现,是 5.5 的 mysql 不支持 datetime 类型字段的默认值为函数或者 timestamp ,支持需要 5.6 版本。

解决问题

由于升级mysql基本没有可能,那就试着绕过去吧,触发器来实现吧。

由于触发器不能在插入后更新表,所以只能定义为在插入之前进行修改,原先想使用datetime来实现,但发现在某些时候依然存在问题,所以使用存入数据库时存字符串的方式进行
修改表的创建语句为

CREATE TABLE t_log (
    id          int(11)         NOT NULL AUTO_INCREMENT,
    log_time    VARCHAR(32)     DEFAULT NULL,
    PRIMARY KEY (id)
);

触发器定义为

DELIMITER ;;
CREATE TRIGGER tri_set_log_time
BEFORE INSERT ON t_log
FOR EACH ROW
BEGIN
    SET NEW.log_time = DATE_FORMAT(NOW(),'%Y-%m-%d %H:%i:%S');
END;;
DELIMITER ;

插入数据库的时间类似于“2018-09-14 12:42:23”

经过测试,很好的解决了问题。

© 著作权归作者所有

共有 人打赏支持
阿信sxq

阿信sxq

粉丝 226
博文 82
码字总数 72407
作品 1
成都
后端工程师
私信 提问
某银行用户安华金和二代数据库安全审计产品测试体验

某银行信用卡中心运维主管 王晶晶 阅读摘要: 某银行信用卡中心运维人员,加入到安华金和二代数据库安全审计产品测试评估当中,将产品体验分享大家。 测试背景: 在银行的数据库系统中,时常...

安华金和
2016/01/26
0
0
五个细节入手 帮助提高数据插入效率

插入数据,是MySQL数据库的基本任务。不过不要小看这个插入数据的动作。在数据库性能优化上,可以在这上面做很大的文章。如果利用MySQL作为一些即时信息化管理软件的后台数据库,如ERP系统。...

李笑石
2013/03/18
0
3
Java读取两个文件时识别文件中的相同内容

假设现在有两个定期抓取的file1.xml和file2.xml文件,每个文件都包含50条记录,两个文件区别在于它们的创建时间不同,file2.xml文件是在file1.xml创建后一小时才新生成的,file2.xml中还是5...

司徒春运
2011/07/31
2.1K
4
nodejs开发——mongodb数据库入门

版权声明:本文为博主原创文章,欢迎分享到其它技术社区,分享请标明出处: https://blog.csdn.net/CHENYUFENG1991/article/details/54835771 当你还在为开发Nodejs使用哪种数据库而犹豫时,...

乞力马扎罗的雪CYF
2017/02/02
0
0
python django框架 渲染和ajax表单提交周报表

一. 实际需求 之前这篇文章kettle-自动生成周报 是使用java开源ETL工具kettle实现,正常情况下是每天写工作完成情况到Excel表,每周五定时任务启动读取Excel日志写入数据库,再读取数据库内容按...

程程同学
2017/11/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Ubuntu常用操作

查看端口号 netstat -anp |grep 端口号 查看已使用端口情况 netstat -nultp(此处不用加端口号) netstat -anp |grep 82查看82端口的使用情况 查找被占用的端口: netstat -tln netstat -tl...

hc321
昨天
0
0
网站cdn的静态资源突然访问变的缓慢,问题排查流程

1.首先我查看了一下是否自己的网络问题,通过对比其他资源的访问速度和下载速度,确认不是 2.通过ping 和 tracert 判断cdn域名能否正常访问,(最后回想感觉这一步可以省略,因为每次最终能访...

小海bug
昨天
0
0
Mybatis 学习笔记四 MyBatis-Plus插件

Mybatis 学习笔记四 MyBatis-Plus插件 maven依赖 <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus</artifactId> <ve......

晨猫
昨天
2
0
小白带你认识netty(二)之netty服务端启动(下)

承接上一篇小白带你认识netty(二)之netty服务端启动(上),还剩下两步骤:3、注册Selector:将Channel注册到Selector上 和 4、端口的绑定:服务端端口的监听。 3、注册Selector:将Chann...

天空小小
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部