纯净、安全、绿色的下载网站

首页|软件分类|下载排行|最新软件|IT学院

当前位置:首页IT学院IT技术

MySQL 时间类型 MySQL 时间类型的选择

岛上码农   2021-06-05 我要评论
想了解MySQL 时间类型的选择的相关内容吗岛上码农在本文为您仔细讲解MySQL 时间类型的相关知识和一些Code实例欢迎阅读和指正我们先划重点:MySQL,时间类型,MySQL,时间类型选择下面大家一起来学习吧

MySQL 提供了 DATETIME 和 TIMESTAMP 两种非常相似的类型处理日期和时间大部分情况下两种都是 OK 的但是有些情况二者会互有优劣

DATETIME

DATETIME 的时间跨度更大可以从1001年到9999年精度是秒并且存储的格式是将日期和时间打包使用 YYYYMMDDhhmmss格式的整数存储这个时间与时区无关需要占用8个字节的存储空间默认MySQL 显示 的DATETIME是有序的明确的格式例如2021-06-02 18:35:23这是 ANSI 的标准日期时间格式

TIMESTAMP

TIMESTAMP即时间戳存储的是自格林威治时间(GMT)1970年1月1日零点以来的秒数和 Unix 系统的时间戳一样TIMESTAMP 仅需要4个字节存储因此能够表示的时间跨度更小从1970年到2038年MySQL 提供了 FROM_UNIXTIME 和 UNIX_TIMESTAMP 函数来完成时间戳和日期之间的转换

在 MySQL 4.1版本后TIMESTAMP 显示的格式和 DATETIME 类似但是TIMESTAMP 的显示依赖于时区MySQL 的服务端、操作系统以及客户端连接都有时区的设置因此如果时间是从多个时区存储的话那 TIMESTAMP 和 DATETIME 的差别就会很大TIMESTAMP 会保留使用时的时区信息而 DATETIME 仅仅是使用文本表示时间

TIMESTAMP 还有额外的特性默认地MySQL会在没有指定值的情况下使用当前时间插入到 TIMESTAMP列而更新的时候如果没有指定值会使用当前时间更新该字段以下面的测试表为例:

CREATE TABLE t_time_test (
    id INT PRIMARY KEY,
    t_stamp TIMESTAMP,
    t_datetime DATETIME
);

可以看到MySQL 给的默认值就是当前时间戳 CURRENT_TIMESTAMP并且有个 ON UPDATE CURRENT_TIMESTAMP表示会随之更新:

INSERT INTO t_time_test(id, t_datetime) VALUES
	(1, NULL), 
	(2, '2021-06-02 18:48:04'), 
	(3, NULL);

可以看到 t_stamp 列自动填充了当前时间

这个特性使得我们可以物协程序维护数据更新时间字段而交由 MySQL 完成

如何选择

从特性上看可能会优先选择使用 TIMESTAMP 来存储时间相比 DATETIME 来说更高效也有些人使用整数存储 Unix 时间戳实际上这种方式并不能获益而且整数还需要额外进行处理因此并不推荐这么做但是一些情况需要注意不要使用 TIMESTAMP 存储时间:

  • 生日:生日肯定会有早于1970年的会超出 TIMESTAMP 的范围
  • 有效期截止时间:TIMESTAMP 的最大时间是2038年如果用来存类似SFZ的有效期截止时间营业执照的截止时间等就不合适
  • 业务生存时间:互联网时代讲究快发展(死得)快如果要成为长久存在的企业那么你的业务时间很可能在2038年还在继续运营毕竟现在都2021年了如果你觉得公司业务挺不到2038年那没关系当然如果幸运地挺到2038年请务必写下一条待办事项:到2038年1月1日前修改数据表时间戳字段类型

如何存储毫秒级时间

通常这个时候需要使用 BIGINT 来将时间转换为整型存储或者是使用浮点数用分数部分表示秒精度一下的时间这两种方式都可行当然这个时候需要应用支持做格式转换

结语

从安全稳妥的角度考虑建议还是优先选择 DATETIME 类型虽然相比 TIMESTAMP 会牺牲一点性能但是 TIMESTAMP 的时间范围是硬伤不要埋下一个隐患等到真的2038年你的公司可能是上市公司的时候程序员可能会遭遇洪水般的 bug 冲击而不明所以结果公司的股价迎来闪崩!然后找出来这个程序员发现是曾经公司的大神目前的股东已经实现财务自由的你!你说尴尬不尴尬?


相关文章

猜您喜欢

网友评论

Copyright 2020 www.fresh-weather.com 【世纪下载站】 版权所有 软件发布

声明:所有软件和文章来自软件开发商或者作者 如有异议 请与本站联系 点此查看联系方式