您现在的位置是:主页 > 数据库技术 > 数据库技术

mysql的timestamp存在时区问题怎么解决

IDCBT2022-01-12服务器技术人已围观

简介本篇内容介绍了“mysql的timestamp存在时区问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希

本篇内容介绍了“mysql的timestamp存在时区问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

众所周知,mysql中有两个时间类型,timestamp与datetime,但当在网上搜索timestamp与datetime区别时,会发现网上有不少与时区有关的完全相反的结论,主要两种:

    timestamp没有时区问题,而datetime有时区问题,原因是timestamp是以UTC格式存储的,而datetime存储类似于时间字符串的形式

    timestamp也有时区问题

    两种观点让人迷惑,那timestamp到底会不会有时区问题呢?

    基本概念

    时区:

    由于地域的限制,人们发明了时区的概念,用来适应人们在时间感受上的差异,比如中国的时区是东8区,表示为+8:00,或GMT+8,而日本的时区是东9区,表示为+9:00,或GMT+9,当中国是早上8点时,日本是早上9点,即东8区的8点与东9区的9点,这两个时间是相等的。

    另外时间还有如下两个概念:

    绝对时间:

    如unix时间缀,是1970-01-01 00:00:00开始到现在的秒数,如:1582416000,这种表示是绝对时间,不受时区影响,也叫纪元时epoch。

    本地时间:

    相对于某一时区的时间,是本地时间,比如东8区的2020-02-23 08:00:00,是中国人的本地时间,而在此时,日本人的本地时间是2020-02-23 09:00:00,所以本地时间都是与某一时区相关的,脱离时区看本地时间,是没有意义的,因为你并不知道这具体是指的什么时间点。

    比如在Java中,Date对象是绝对时间,通过SimpleDateFormat格式化出来的yyyy-MM-dd HH:mm:ss形式的时间字符串,是本地时间,如果SimpleDateFormat没有调用setTimeZone()显示指定时区,那么默认用的是jvm运行在的操作系统上的时区,我们开发机上的时区基本都是GMT+8。

    timestamp与datetime区别

    如下,我创建了一张表,里面time_stamp是timestamp类型,date_time是datetime类型,create_timestamp、create_datetime是timestamp与datetime类型,但是它们可以由数据库自动生成。

    CREATE TABLE `time_test` (
      `id` bigint unsigned,
      `time_stamp` timestamp,
      `date_time` datetime,
      `create_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      `create_datetime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
      PRIMARY KEY (`id`)
    )

    1、首先将数据库时区设置为+8:00,即中国的东8区

    2、然后如下手动插入一个固定时间的数据,以及用now()函数插入当前时间

    标签:

    很赞哦! ()

本栏推荐