本文主要是介绍MySQL中date、datetime、timestamp、time、year的区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
前言
表示时间值的日期和时间类型为DATETIME、DATE、TIMESTAMP、TIME、YEAR
。
每个时间类型有一个有效值范围和一个"零"值,当指定不合法的MySQL不能表示的值时使用"零"值。
时间类型
类型 | 大小(bytes) | 范围 | 格式 | 小数点精度支持 | 用途 |
---|---|---|---|---|---|
YEAR | 1 | 1901/2155 | YYYY | 0 | 年份值 |
DATE | 3 | 1000-01-01/9999-12-31 | YYYY-MM-DD | 0 | 日期值 |
TIME | 3 | ‘-838:59:59’/‘838:59:59’ | HH:MM:SS | [0,6] | 时间值或持续时间 |
DATETIME | 8 | 1000-01-01 00:00:00/9999-12-31 23:59:59 | YYYY-MM-DD HH:MM:SS | [0,6] | 混合日期和时间值 |
TIMESTAMP | 4 | 1970-01-01 00:00:00/2038 结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07 | YYYYMMDD HHMMSS | [0,6] | 混合日期和时间值,时间戳 |
精度处理
时间精度定义
定义支持小数点精度的长度为6位(最大支持6位精度)
CREATE TABLE `test` (`date` date DEFAULT NULL,`datetime` datetime(6) DEFAULT NULL,`timestamp` timestamp(6) NULL DEFAULT NULL,`time` time(6) DEFAULT NULL,`year` year(4) DEFAULT NULL
)
时间精度插入
- 插入2位,小于定义的6位,默认对缺失位补零
INSERT INTO test (DATETIME) VALUES (‘2021-04-01 10:10:10.12’)
- 插入6位,等于定义的6位,插入正常
INSERT INTO test (DATETIME) VALUES (‘2021-04-01 10:10:10.123456’)
- 插入9位,大于定义的6位,插入异常
INSERT INTO test (DATETIME) VALUES (‘2021-04-01 10:10:10.123456789’)
当插入时间精度时,可以按照设定的精度进行插入,不要超过精度设置否则会出现异常问题,或者可以直接使用mysql函数
now()
配合精度来获取时间,如now(6)
总结
- time、datetime、timestamp都支持小数点0~6的精度,year、date记录的是年份、年月日,因此不支持小数点时间精度
- datetime、timestamp都可以用来记录年月日时分秒,也支持最大6位的小数点精度,但是timestamp占用4字节存储范围较小,从系统长久使用、健壮性以及后续维护成本来说不建议使用该类型来记录时间,datetime占用8字节存储范围较大,一般我们采用datetime来进行时间数据存储,能满足大部分业务场景对时间范围、精度的最大要求
参考
MySQL TIMESTAMP 时间精度问题
MySQL Date and Time Data Type Representation
MySQL 数据类型

这篇关于MySQL中date、datetime、timestamp、time、year的区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!