文档章节

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

阿信sxq
 阿信sxq
发布于 2017/06/20 16:02
字数 612
阅读 150
收藏 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

粉丝 227
博文 83
码字总数 73652
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

centos7重置密码、单用户模式、救援模式、ls命令、chmod命令

在工作当中如果我们错误的配置了文件使服务器不能正常启动或者忘记密码不能登录系统,如何解决这些问题呢?重装系统是可以实现的,但是往往不能轻易重装系统的,下面用忘记密码作为例子讲解如...

李超小牛子
28分钟前
0
0
Python如何开发桌面应用程序?Python基础教程,第十三讲,图形界面

当使用桌面应用程序的时候,有没有那么一瞬间,想学习一下桌面应用程序开发?行业内专业的桌面应用程序开发一般是C++,C#来做,Java开发的也有,但是比较少。本节课会介绍Python的GUI(图形用...

程序员补给栈
今天
5
0
kafka在的使用

一、基本概念 介绍 Kafka是一个分布式的、可分区的、可复制的消息系统。它提供了普通消息系统的功能,但具有自己独特的设计。 这个独特的设计是什么样的呢? 首先让我们看几个基本的消息系统...

狼王黄师傅
今天
3
0
Android JNI总结

0x01 JNI介绍 JNI是Java Native Interface的缩写,JNI不是Android专有的东西,它是从Java继承而来,但是在Android中,JNI的作用和重要性大大增强。 JNI在Android中起着连接Java和C/C++层的作...

天王盖地虎626
昨天
3
0
大数据教程(11.8)Hive1.2.2简介&初体验

上一篇文章分析了Hive1.2.2的安装,本节博主将分享Hive的体验&Hive服务端和客户端的使用方法。 一、Hive与hadoop直接的关系 Hive利用HDFS存储数据,利用MapReduce查询数据。 二、Hive与传统数...

em_aaron
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部