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的区别相关推荐
- setTimeStamp()与setDate()区别 如何将java中Date存入mysql中的datetime中,字符串怎么转换为日期类型
数据库 1.java.sql.Date 与 java.util.Date java.sql.Date是从java.util.Date中继承而来 假设 dates1(java.sql.Date)要赋值给 ...
- mysql 时间类型 datetime,timestamp
2019独角兽企业重金招聘Python工程师标准>>> CURRENT_TIMESTAMP 的 timestamp 意思是 根据 mysql 的当前时间,使用mysql 的当前时间. ...
- php 时间戳存储 原因,将php文件中的unix时间戳存储到mysql中(store unix timestamp from php file into mysql)...
将php文件中的unix时间戳存储到mysql中(store unix timestamp from php file into mysql) 现在我有这个代码: $mysqldate = date( ...
- php普通索引和唯一索引,MySQL中普通索引和唯一索引的区别详解
本篇文章介绍了MySQL中普通索引和唯一索引的区别,讲解很详细,希望对学习MySQL的朋友有帮助! 需要注意的是: redo log中的数据,可能还没有 flush 到磁盘,磁盘中的 Page 1 和 ...
- MySQL中索引与视图的用法与区别详解
索引与视图是我们在日常使用mysql必不可少的一部分,最近在学习中看到一本书中关于这方法写的不错,所以这篇文章主要给大家介绍了关于MySQL中索引与视图的使用与区别的相关资料,需要的朋友可以参考借鉴, ...
- MySQL+create+base,MySQL中CREATE DATABASE和CREATE SCHEMA的区别
MySQL中CREATE DATABASE和CREATE SCHEMA的区别 create schema 是创建模式 create database 是创建数据库 但进入MySQL不用选择任何数据库即 ...
- mysql中 REPLACE INTO 和 INSERT INTO 的区别
mysql中 REPLACE INTO 和 INSERT INTO 的区别 REPLACE INTO 和 INSERT INTO 功能类似,都是像表中插入数据,不同点在于:REPLACE INTO 首 ...
- mysql中的where和having子句的区别
mysql中的where和having子句的区别 having的用法 having字句可以让我们筛选成组后的各种数据,where字句在聚合前先筛选记录,也就是说作用在group by和having字句 ...
- MySQL中char,varchar和text的区别
MySQL中char,varchar和text的区别 java程序中的string类型,在mysql数据表中可以有三种对应的类型:char,varchar和text. char,varchar和tex ...
- mysql publishedtime_MySQL数据库中的Date,DateTime,TimeStamp和Time类型
DATETIME类型用在你需要同时包含日期和时间信息的值时.MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:0 ...
最新文章
- SQL Server-聚焦什么时候用OPTION(COMPILE)呢?
- mysql嵌套实战_艰难的mysql嵌套表结果挑战
- 魔兽最多人的服务器,魔兽怀旧服:70级热门服务器人口一览!这4大服最值得建号投入!...
- MySQL社区版的下载和安装
- 漂亮图片演示ajax制作教程-lightbox
- Ansible 之 用户管理
- 远程计算机没反映6678,6678 PCIe 与FPGA LINK UP 后 不能获得FPGA的DEVICE_ID和VENDDR_ID
- UEFI.源码分析.DXE的异步事件服务.第一部分.事件驱动
- ExtJS4 时间在edge中显示为0NaN-NaN-NaN NaN:NaN
- prisma 连接不上Postgres
- 【亚马逊】AWS re:Invent 2022 创新不平衡
- 云服务器一键搭建脚本
- 服务器主机玩游戏性能如何,用服务器主机玩游戏怎么样
- python3--opencc安装方式
- 【NFS共享存储服务】
- 全球及中国包装产业需求规模与投资发展策略研究报告2022版
- hdfs文件误删恢复
- 男子在网吧蜗居4年半 曾647分考上大学 IS2120@BG57IV3
- 無名の主页个人主页html源码(附源码)
- 阿里巴巴集团增持阿里影业股权完成交割
热门文章
- 上海财经计算机专业考研,考研择校:魔都的复旦、同济、上财哪个更有前途?看网友怎么说!...
- C++的异常(转载 )
- switch怎么切换服务器账号,怎么查看switch账号所属服务器
- Android 编译之make基础(转)
- Linux 服务器配置使用密钥登录教程
- 计算机窗口弹出多个窗口,电脑怎么打开多个微信窗口
- RHadoop实验 – 统计邮箱出现次数
- 华为畅享10与10s有什么区别?哪个更好
- 70个经典的 Shell 脚本
- ZYNQ学习之路19.在SDx中使用xfOpenCV图像加速处理