文章插图
流行数据库系统 MySQL 的新老用户常常会对数据库处理时间值的方式感到困惑 。有时用户不会费心去了解时间值的数据类型 。这可能是因为他们觉得本身也没有什么好了解的 。日期就是日期 , 对吧?好吧 , 并非总是如此 。花几分钟时间了解 MySQL 如何存储和显示日期和时间是有益的 。学习如何最好地利用数据库表中的时间值可以帮助你成为更好的编码者 。
MySQL 时间值类型当你在 MySQL 中新建表时 , 选择合适的数据类型(
INT
、FLOAT
、CHAR
等)高效地保存插入到表中的数据 。MySQL 为时间值提供了五种数据类型 。它们是 DATE
、TIME
、DATETIME
、TIMESTAMP
和 YEAR
。MySQL 使用
ISO 8601
格式来存储以下格式的值(LCTT 译注:国际标准 ISO 8601 , 是国际标准化组织的日期和时间的表示方法 , 全称为《数据存储和交换形式·信息交换·日期和时间的表示方法》):DATE
:YYYY-MM-DD
TIME
:HH:MM:SS
TIMESTAMP
:YYYY-MM-DD HH:MM:SS
YEAR
:YYYY
首先 , 可以使用的日期范围不同 。
DATETIME
可以保存 1000-01-01 00:00:00 和 9999-12-31 23:59:59 之间的日期 , 而 TIMESTAMP
的范围更有限 , 从 1970-01-01 00:00:01 到 2038-01-19 03:14:07 UTC 。其次 , 虽然两种数据类型都允许你 自动初始化auto_initialize 或 自动更新auto_update 它们各自的值(分别用
DEFAULT CURRENT_TIMESTAMP
和 ON UPDATE CURRENT_TIMESTAMP
) , 但在 5.6.5 版本之前 , 对 DATETIME
值不能这样操作 。如果你要用 DATETIME
, 你可以使用 CURRENT_TIMESTAMP
的 MySQL 同义词之一 , 例如 NOW()
或 LOCALTIME()
。如果你对一个
DATETIME
值使用 ON UPDATE CURENT_TIMESTAMP
(或其同义词之一) , 但没有使用 DEFAULT CURRENT_TIMESTAMP
子句 , 那么这个列的默认值为 NULL
。除非你在表的定义中包含 NOT NULL
, 在这种情况下 , 它默认为 0 。另一件需要记住的重要事情是 , 尽管通常情况下 , 除非你声明一个默认值 , 否则
DATETIME
和 TIMESTAMP
列都没有一个默认值 , 但这个规则有一个例外 。如果没有指定 DEFAULT CURRENT_TIMESTAMP
和 ON UPDATE CURRENT_TIMESTAMP
这两个子句 , 并且禁用 explicit_defaults_for_timestamp
这个变量 , 那么你表中的第一个 TIMESTAMP
列将被隐式创建 。要检查这个变量的状态 , 请运行:
mysql> show variables like 'explicit_default%';
如果你想打开或关闭它 , 运行这段代码(用 0 表示关闭 , 用 1 表示打开):mysql> set explicit_defaults_for_timestamp = 0;
TIMEMySQL 的 时间TIME首先要注意的是 , 虽然
TIME
经常被认为是一天中的时间 , 但它实际上是经过的时间 。换句话说 , 它可以是一个负值 , 或者可以大于 23:59:59 。在 MySQL 中 , 一个 TIME
值的范围可以是 -838:59:59 到 838:59:59 。另外 , 如果你缩写一个时间值 , MySQL 会因你是否使用冒号作出不同解释 。例如 , 10:34 这个值被 MySQL 看作是 10:34:00 。也就是说 , 十点过后的 34 分钟 。但是 , 如果你不使用冒号写作
1034
, MySQL 将其视为 00:10:34 , 意思是 10 分钟 34 秒 。最后 , 你应该知道
TIME
值(以及 DATETIME
和 TIMESTAMP
字段的时间部分)从 5.6.4 版本开始 , 可以取一个小数部分 。要使用它 , 请在数据类型定义的结尾处添加一个整数(最大值为 6)的圆括号 。
推荐阅读
- 取代C++!微软正在改用Rust语言重写Win11内核
- Spring/SpringBoot中的声明式事务和编程式事务源码、区别、优缺点、适用场景、实战
- 软件架构设计之构件与中间件技术
- 从Java源码来看Native命令执行方法
- 使用 Linux 命令从图像中删除背景
- 如何处理生产环境中的数据和机器学习偏误?
- 黄晓明|《外星人在娱乐圈》段影帝的外星女友攻略路
- 支付宝可以在“出行付款码前”进行密码验证吗?
- 毕滢|洪欣和张丹峰被曝没离婚,毕滢从中劝和,曝光和洪欣电话聊天内容
- 女人在月经期间,欲望真的很强吗?