MySQL 保存日期用哪种数据类型

写在前面

在设计数据库表时不可避免的需要用到时间类型,到底选择那种数据类型来表示时间是一个值的讨论的问题,本文就一起来看下!

1:能用哪些数据类型

1:字符串:不要用,占用空间大,至少需要19个字节,且无法使用日期相关函数
2:Datetime,可考虑
3:Timestamp,可考虑
4:整数,可考虑

1.1:字符串

最好不要使用,占用空间大,且无法使用日期相关函数处理。

1.2:Datetime

与时区无关,保存多少就是多少,最大表示9999年,占用空间5~8字节。

1.3:Timestamp

与时区有关,占用空间4~7字节,最大表示到2038年,且在所在行更新时,该字段会自动更新为最后一次更新的时间,像"修改时间"这类标识数据行修改时间的列可考虑选择Timestamp数据类型,另外如果需要时区信息的话,也可以考虑使用该数据类型。

下面看下时区相关测试:

  • 查看当前时区
    MySQL 保存日期用哪种数据类型_第1张图片
  • 创建数据
CREATE TABLE `time_zone_test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `date_time` datetime DEFAULT NULL,
  `time_stamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO time_zone_test(date_time,time_stamp) VALUES(NOW(),NOW());
  • 查看数据
    MySQL 保存日期用哪种数据类型_第2张图片
  • 修改时区为东7区在查看时间
SET time_zone='+7:00';

MySQL 保存日期用哪种数据类型_第3张图片
可以看到timestamp的字段在原来东八区的基础上减了一个小时。

1.4:整数值

占用4个字节,对占用空间敏感的业务,可考虑使用,然后在程序中做转换即可,或者使用MySQL函数转换,如下使用MySQL函数转换:
MySQL 保存日期用哪种数据类型_第4张图片

最后看下对比:
MySQL 保存日期用哪种数据类型_第5张图片

写在后面

参考文章列表

美团面试:MySQL 保存日期用哪种数据类型?Datetime?Timestamp?数值时间戳? 。

你可能感兴趣的:(杂,mysql,数据库)