iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >为什么MySQL 使用timestamp可以无视时区问题.
  • 707
分享到

为什么MySQL 使用timestamp可以无视时区问题.

MySQLtimestampMySQL时区 2022-05-28 07:05:52 707人浏览 八月长安
摘要

之前一直有过疑惑为什么Mysql数据库存timestamp可以无视时区问题. 在业务中也是一直使用Laravel框架,内置的Migration也是使用的timestamp类型字段, 也没太关心. 开始 查看当前数据

之前一直有过疑惑为什么Mysql数据库timestamp可以无视时区问题.
在业务中也是一直使用Laravel框架,内置的Migration也是使用的timestamp类型字段, 也没太关心.

开始

查看当前数据库时区


mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name  | Value |
+------------------+--------+
| system_time_zone | CST  |
| time_zone    | +08:00 |
+------------------+--------+
2 rows in set (0.30 sec)

查看表结构


mysql> desc timestamp_test;
+--------------+-----------+------+-----+---------+----------------+
| Field    | Type   | Null | Key | Default | Extra     |
+--------------+-----------+------+-----+---------+----------------+
| id      | int    | NO  | PRI | NULL  | auto_increment |
| created_time | datetime | YES |   | NULL  |        |
| created_at  | timestamp | YES |   | NULL  |        |
+--------------+-----------+------+-----+---------+----------------+
3 rows in set (0.26 sec)

插入数据


mysql> insert into timestamp_test(created_time, created_at) values('2020-12-09 08:00:00', '2020-12-09 08:00:00');
Query OK, 1 row affected (0.22 sec)


mysql> select * from timestamp_test;
+----+---------------------+---------------------+
| id | created_time    | created_at     |
+----+---------------------+---------------------+
| 1 | 2020-12-09 08:00:00 | 2020-12-09 08:00:00 |
+----+---------------------+---------------------+
1 row in set (0.06 sec)

这个时间看起来是没问题的, 那么我们尝试修改时区再插入数据


mysql> SET time_zone = "+00:00";
Query OK, 0 rows affected (0.03 sec)

mysql> insert into timestamp_test(created_time, created_at) values('2020-12-09 08:00:00', '2020-12-09 08:00:00');
Query OK, 1 row affected (0.03 sec)

mysql> SET time_zone = "+08:00";
Query OK, 0 rows affected (0.04 sec)

这时候再查看数据, 两条插入的SQL是一样的,但是发现查询的结果是不一样的
这两条数据created_at的相差正好是时区的时间差


mysql> select * from timestamp_test;
+----+---------------------+---------------------+
| id | created_time    | created_at     |
+----+---------------------+---------------------+
| 1 | 2020-12-09 08:00:00 | 2020-12-09 08:00:00 |
| 2 | 2020-12-09 08:00:00 | 2020-12-09 16:00:00 |
+----+---------------------+---------------------+
2 rows in set (0.06 sec)

再看一下实际存储的时间戳, 然后我们变化时区, 发现字段时间变化了,但是原始的时间戳数据没变


mysql> select *, unix_timestamp(created_at) from timestamp_test;
+----+---------------------+---------------------+----------------------------+
| id | created_time    | created_at     | unix_timestamp(created_at) |
+----+---------------------+---------------------+----------------------------+
| 1 | 2020-12-09 08:00:00 | 2020-12-09 08:00:00 |         1607472000 |
| 2 | 2020-12-09 08:00:00 | 2020-12-09 16:00:00 |         1607500800 |
+----+---------------------+---------------------+----------------------------+
2 rows in set (0.06 sec)

mysql> SET time_zone = "+00:00";
Query OK, 0 rows affected (0.09 sec)

mysql> show variables like "%time_zone%";
+------------------+--------+
| Variable_name  | Value |
+------------------+--------+
| system_time_zone | CST  |
| time_zone    | +00:00 |
+------------------+--------+
2 rows in set (0.08 sec)

mysql> select *, unix_timestamp(created_at) from timestamp_test;
+----+---------------------+---------------------+----------------------------+
| id | created_time    | created_at     | unix_timestamp(created_at) |
+----+---------------------+---------------------+----------------------------+
| 1 | 2020-12-09 08:00:00 | 2020-12-09 00:00:00 |         1607472000 |
| 2 | 2020-12-09 08:00:00 | 2020-12-09 08:00:00 |         1607500800 |
+----+---------------------+---------------------+----------------------------+
2 rows in set (0.18 sec)

因为这一切是MySQL隐式的帮我们转换了, 让我们不用关心时区的问题

就是数据库实际上会保存 UTC 时间戳,写入的时候先按 Session 时区转成 UTC 时间,读出的时候再按 Session 时区转成当前时区的时间,这些转换都是透明的

  • 假如我们在正八区存储了2020-12-09 08:00:00时间的一条数据
  • 我们在正八区取出这一条数据, 时间依然是2020-12-09 08:00:00
  • 这时候我们有一台在零时区的服务器,连接MySQL,并且把当前连接的时区设置为+00:00,再去查数据库这条记录,查到的数据是:2020-12-09 00:00:00, 正好对应零时区的时间,这样子我们就不用考虑时区的问题.

以上就是为什么MySQL timestamp可以无视时区问题.的详细内容,更多关于MySQL timestamp无视时区的资料请关注自学编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: 为什么MySQL 使用timestamp可以无视时区问题.

本文链接: https://www.lsjlt.com/news/10026.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mysql的timestamp存在时区问题怎么解决
    本篇内容介绍了“mysql的timestamp存在时区问题怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有...
    99+
    2024-04-02
  • mysql的timestamp存在的时区问题怎么解决
    这篇文章主要讲解了“mysql的timestamp存在的时区问题怎么解决”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“mysql的timestamp存在的时...
    99+
    2024-04-02
  • mysql什么时候可以使用索引
    这篇文章主要介绍mysql什么时候可以使用索引,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!            &nb...
    99+
    2024-04-02
  • MySQL为什么临时表可以重名
    目录临时表的特性临时表的应用为什么临时表可以重名?临时表和主备复制主库上不同的线程创建同名的临时表是没关系的,但是传到备库执行是怎么处理的呢?今天我们就从这个问题说起:临时表有哪些特...
    99+
    2024-04-02
  • 使用MYSQL TIMESTAMP字段进行时间加减运算问题
    目录mysql TIMESTAMP字段进行时间加减运算计算公式如下DATETIME 与 TIMESTAMP的区别结论参考文档MYSQL TIMESTAMP字段进行时间加减运算 在数据分析过程中,想当然地对TIMESTAM...
    99+
    2023-02-06
    MYSQLTIMESTAMP字段 时间加减运算 MYSQL时间加减运算
  • 什么时候可以考虑使用MySQL MEMORY引擎
    通常使用MEMORY涉及到以下特性: 1.操作相关的短暂的,非重要数据的管理或者cache,当MySQL进程夯住或服务重启,MEMORY表的数据就会丢失。 2.内存存储访问快速,并且延迟低。数据可以填充到内...
    99+
    2024-04-02
  • SpringBoot为什么可以使用Jar包启动
    这篇文章将为大家详细讲解有关SpringBoot为什么可以使用Jar包启动,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。引言很多初学者会比较困惑,Spring Boot 是如何做到将应用代码和所有的依赖打...
    99+
    2023-06-29
  • 为什么使用Kotlin:forEach也可以break和continue
    这期内容当中小编将会给大家带来有关为什么使用Kotlin:forEach也可以break和continue,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。详解Kotlin:forEach也能break和co...
    99+
    2023-05-31
    kotlin foreach break
  • 一篇永久摆脱Mysql时区错误问题,idea数据库可视化插件配置
    项目场景: 今天在做项目的时候遇到一个关于mysql时区的问题,在这里汇总记录一下解决过程,希望可以帮助到有需要的人。 问题描述 在做项目的时候突然遇到以下的报错,可以看到是说 数据库的时区错误,这里使用的是Mysql 8.0....
    99+
    2023-08-20
    mysql 数据库 intellij-idea java sql
  • 讨论为什么GitHub可以当做论坛使用
    GitHub是一个全球最大的开源社区,主要用于版本控制和协作开发。虽然GitHub不是一个传统的论坛网站,但它可以用来作为一个论坛的替代品。在本文中,我们将讨论为什么GitHub可以当做论坛使用,以及如何在GitHub上创建一个论坛。为什么...
    99+
    2023-10-22
  • vue怎么使用wavesurfer.js解决音频可视化播放问题
    这篇文章主要介绍“vue怎么使用wavesurfer.js解决音频可视化播放问题”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“vue怎么使用wavesurfer.js解决音频可视化播放问题”文章能帮...
    99+
    2023-06-29
  • 域名使用时需要注意什么问题
    本篇内容主要讲解“域名使用时需要注意什么问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“域名使用时需要注意什么问题”吧! 很多人认为在完成域名注册后就可以万事大吉了,实际上并没有那么...
    99+
    2023-06-06
  • 为什么在MySQL中几乎不使用分区表
    这篇文章主要介绍“为什么在MySQL中几乎不使用分区表”,在日常操作中,相信很多人在为什么在MySQL中几乎不使用分区表问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”为什么在...
    99+
    2024-04-02
  • 云服务器和Docker:为什么它们可以一起使用?
    1. 云服务器的优势 云服务器是一种基于云计算技术的虚拟服务器,它可以提供弹性、可扩展和高可用性的计算资源。使用云服务器,您可以根据需要快速创建、启动和停止虚拟机实例,而无需购买和维护物理硬件。云服务器还提供了灵活的计费模式,您只需按照实...
    99+
    2023-10-27
    服务器 Docker
  • 使用云服务器可以为企业带来什么好处
    灵活性和可扩展性:云服务器可以根据企业需求灵活调整资源,实现快速扩容或缩容,节省成本和提高效率。 高可靠性和安全性:云服务器...
    99+
    2024-05-10
    云服务器
  • 为什么使用 Spring 打包 NumPy 可以提高 Go 的性能?
    在现代软件开发中,使用多种编程语言的组合已经成为一种常见的方式。例如,你可能会在一个项目中同时使用 Java 和 Go,这两种语言各有其优势和适用场景。但是,如何让这些不同的语言协同工作,以实现更高效的运行效果呢?这就需要借助一些工具和框架...
    99+
    2023-09-28
    spring 打包 numpy
  • 使用代理IP是为了解决什么问题
    这篇文章主要讲解了“使用代理IP是为了解决什么问题”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“使用代理IP是为了解决什么问题”吧!在当今网络互联的世界,网络连接不仅依赖于有线和无线接入,还...
    99+
    2023-06-20
  • TCP为什么是三次握手和四次挥手以及可能出现的问题
    目录 TCP为啥设定为三次握手(两个角度分析)不可靠产生无效链接浪费服务器资源 TCP为啥四次挥手服务端有剩余数据需要发送--四次挥手(多数情况)服务端无剩余数据发送--捎带应答--四次...
    99+
    2023-08-31
    tcp/ip 网络 服务器
  • Macosx下使用docker/mysql会出现什么问题
    这篇文章主要为大家展示了“Macosx下使用docker/mysql会出现什么问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Macosx下使用docker/...
    99+
    2024-04-02
  • 使用vps美国服务器为什么会无法访问
    使用vps美国服务器无法访问的原因有:1、机房遭受恶意攻击,导致整体服务器出现故障造成无法访问;2、服务器上其他主机被攻击,从而牵连自身VPS无法正常访问;3、使用防火墙不当,导致无法访问;4、被黑客入侵,导致无法访问;5、内存不足,导致无...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作