MYSQL时间类别总结: TIMESTAMP、DATETIME、DATE、TIME、YEAR
总结背景: 对于MYSQL数据库日期类型或多有了解, 但并很清晰其中一些规则. 基本都是面向浏览器编码, 这实质上也是一种方式. 但期间遇到两个问题:
- 时常遇到建表中出现多个datetime或者timestamp字段并使用 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP时报错, 难以查到原因, 最后粗暴的直接去掉
- 查询网络非官方文档知识点不全, 越查越糊涂
因为这两点 促使我硬着头皮查看MYSQL的官方文档 虽然刚开始很难受 结果的确收获颇多. 以下是我的一点总结:
2、Automatic Initialization and Updating for TIMESTAMP and DATETIME
1、类型简介
1.1、存储使用的长度
MySQL 5.6.4版本之后允许TIME、TIMESTAMP、DATETIME类型具有[0-6]位小数部分(Fractional Seconds in Time Values), 因而存储使用长度为变化的
Data Type | Storage Required Before MySQL 5.6.4 | Storage Required as of MySQL 5.6.4 |
---|---|---|
YEAR |
1 byte | 1 byte |
DATE |
3 bytes | 3 bytes |
TIME |
3 bytes | 3 bytes + fractional seconds storage |
DATETIME |
8 bytes | 5 bytes + fractional seconds storage |
TIMESTAMP |
4 bytes | 4 bytes + fractional seconds storage |
例如 time类型使用3 bytes存储, 加上小数部分长度. 而需要多少长度,取决于小数的长度:
Fractional Seconds Precision | Storage Required |
---|---|
0 | 0 bytes |
1, 2 | 1 byte |
3, 4 | 2 bytes |
5, 6 | 3 bytes |
例如 , TIME(0)
, TIME(2)
, TIME(4)
, and TIME(6)
分别总共使用 3, 4, 5, and 6 bytes . TIME
and TIME(0)
实质是一样的, 都需要3 bytes进行存储 .
1.2、字段声明和表示范围
由于MYSQL官方文档已经很清晰 直接附上原始文档 Date and Time Type Overview 这里只分析需要注意的点:
- DATE 表示范围在
'1000-01-01'
to'9999-12-31' 存储格式为'yyyy-mm-dd',也可能出现年使用 two-digit表示 例如: 12-01-01 MYSQL解释规则为:
00-69
解释为2000-2069
70-99解释为
1970-1999
TIMESTAMP表示范围在'1970-01-01 00:00:01.000000'
UTC to'2038-01-19 03:14:07.999999'
UTC , 而MySQL将TIMESTAMP值从当前时区转换为UTC以进行存储,并从UTC转换回当前时区以进行检索。如果期间时区发生的变化, 例如存储之后修改时区Section 5.1.12, “MySQL Server Time Zone Support. 那么取出来和之前存入的数据将不一致.- DATETIME表示范围为
'1000-01-01 00:00:00'
to'9999-12-31 23:59:59' 无时区.
- 如果strict mode禁用 , 非法
DATE
,DATETIME
, orTIMESTAMP
的时间会被转换为“零值” 根据类型转换为'0000-00-00'
or'0000-00-00 00:00:00', 否则直接会报错
- YEAR存在历史问题
YEAR(4)
和YEAR(2)(YEAR(2) Limitations and Migrating to YEAR(4)
). YEAR(2)在MySQL 5.6.6之后已标注过时,使用YEAR(2)会被强制转换为YEAR(4)并产生warnings.
YEAR允许使用
YY
format 和 字符串('0'-'99','0'-
'69'表示
2000
到2069
''70'-
'99'表示1970-1999
)、数字(1-99, 1-69表示2001-2069 70-99表示1970-1999)进行赋值.
2、Automatic Initialization and Updating for TIMESTAMP and DATETIME(自动初始化 和 自动更新)
由于文章写的比较详细, 这里不再赘述, 给出原文链接 Automatic Initialization and Updating for TIMESTAMP and DATETIME 和 explicit_defaults_for_timestamp
3、总结
知识还是需要系统性的了解, 即使记不住也没关系. 下次再去查询文档资料的时候会更有针对性. 而对于大多权威的技术文章都是英文 需要耐心下来阅读 一定有所收获.
主要参考链接: Date and Time Types
MYSQL时间类别总结: TIMESTAMP、DATETIME、DATE、TIME、YEAR的更多相关文章
- MySQL时间设计 int timestamp datatime 查询效率性能比较
在数据库设计的时候,我们经常会需要设计时间字段,在MYSQL中,时间字段可以使用int.timestamp.datetime三种类型来存储,那么这三种类型哪一种用来存储时间性能比较高,效率好呢?飘易就 ...
- mysql中的时间类型datetime,date,time,year,timestamp小知识点
1.datetime,date,time,year四个类型的值,可以手动输入,也可以调用函数获得值 ① 手动输入,格式如下: datetime "2016-6-22 14:09:30&quo ...
- 关于datetime,date,timestamp,year,time时间类型小结
关于datetime,date,timestamp,year,time时间类型 datetime占用8个字节 日期范围:”1000-01-01 00:00:00” 到”9999-12-31 23:59 ...
- mysql 时间类型datetime与timestamp区别比较
mysql 时间类型datetime与timestamp区别比较 相同点: 显示宽度和格式相同,显示宽度固定在19字符,格式为YYYY-MM-DD HH:MM:SS. 不同点: (1)时间范围不同: ...
- MySQL时间类型datetime、bigint及timestamp的查询效率
前期数据准备 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_dat ...
- mysql中timestamp,datetime,int类型的区别与优劣
转载请注明来自 souldak,微博: @evagle 以下内容 整合筛选自互联网: int 1. 占用4个字节 2. 建立索引之后,查询速度快 3. 条件范围搜索可以使用使用between 4. 不 ...
- mysql date and time type ---- mysql 时间&日期 类型详解
mysql 中支持用多种方式来表示时间与日期 一.mysql 中能表示时间与日期的数据类型: 1.表示年 ) -- 最好不要用这个数据类型.对于年份的取值中有[1901 --> 2155] + ...
- 【转载】mysql中timestamp,datetime,int类型的区别与优劣
转载来自souldak,微博:@evagle以下内容整合筛选自互联网: int1. 占用4个字节2. 建立索引之后,查询速度快3. 条件范围搜索可以使用使用between4. 不能使用mysql提供的 ...
- Java获取当前时间及String、datetime、date相互转化
一.获取当前系统时间和日期并格式化输出: import java.util.Date; import java.text.SimpleDateFormat; public class NowStrin ...
随机推荐
- Ex 6_4 判断序列是否由合法单词组成..._第六次作业
设字符串为s,字符串中字符的个数为n,vi[i]表示前i+1个字符是否能组成有效的单词vi[i]=true表示能组成有效的单词,vi[i]=false表示不能组成有效的单词,在每个字符串前加一个空格, ...
- Oracle常用sql语句(一)
# Sql的分类 # DDL (Data Definition Language):数据定义语言,用来定义数据库对象:库.表.列等: CREATE. ALTER.DROP DML(Data Manip ...
- 红包外挂史及AccessibilityService分析与防御
最近在做一个有趣的外挂的小玩意,前提我们要了解一个重要的类AccessibilityService 转载请注明出处:https://lizhaoxuan.github.io 前言 提起Accessib ...
- python中type、object与class之间关系(一切皆对象)
object是最顶层基类 object是type的实例,而type又继承object type是自身的实例 >>> class Student: ... pass ... >& ...
- 11:django 模板 内建标签
django 内建标签 autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} bl ...
- three.js 相机camera位置属性设置详解
开始很懵逼,完全不能理解,有个position,还要up和lookAt干嘛. [黑人问号脸❓❓❓] 既然是位置属性不明白,那默认其它属性都懂了. 上坐标轴: 先来第一个position属性,可以设置x ...
- LeetCode(33):搜索旋转排序数组
Medium! 题目描述: 假设按照升序排序的数组在预先未知的某个点上进行了旋转. ( 例如,数组 [0,1,2,4,5,6,7] 可能变为 [4,5,6,7,0,1,2] ). 搜索一个给定的目标值 ...
- 利用setTimeout延时器 制作广告自动关闭
模仿广告自动关闭效果 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- NodeJS学习:搭建私有NPM
工具 verdaccio nrm pm2 特点 verdaccio 的特点: 不同步拉取npm库,占据大量硬盘,没有硬盘被撑爆的问题: 安装配置极其简单,不需要数据库: 支持配置上游registry配 ...
- Mybatis中的like模糊查询四种方式
1. 参数中直接加入%% param.setUsername("%CD%"); param.setPassword("%11%"); <select i ...