时间戳数据存储

、TimeStamp的取值范围为'1970-01-01 00:00:01' UTC 至'2038-01-19 03:14:07' UTC;
、在存储时间戳数据时先将数据转换为UTC时区,然后计算起毫秒值,再存放到表中;
、在读取时间戳数据时先将数据转换为UTC时区,然后转换为本地时区显示给用户;
、时间戳类型使用4个字节来存放数据。

时间戳字段定义

、时间戳字段包含DEFAULT CURRENT_TIMESTAMP, 表示插入记录行时,如果未对该列指定值,则使用当前时间来为该字段赋值。
、时间戳字段包含ON UPDATE CURRENT_TIMESTAMP, 表示在更新记录时,如果为更新该事件戳列,使用当前时间来更新该字段。
、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP,表示该字段仅在插入且未指定值时被赋予当前时间,再更新时且未指定值时不做修改。
、当字段定义为timestamp ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入且未指定值时被赋值为"0000-00-00 00:00:00",在更新且未指定值时更新为当前时间。
、当字段定义为timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示该字段在插入或更新时未指定值,则被赋值为当前时间。
、时间戳字段在MySQL 5.5和MySQL 57中隐式默认值为NOT NULL,在MySQL 5.6中隐式默认值为NULL。
、在MySQL中,时间戳字段可以被显式插入或更新。
、在MySQL中可以定义多个时间戳列。

参数对时间戳的影响

当参数explicit_defaults_for_timestamp设置为1时:
、TIMESTAMP列如果没有明确指定为NOT NLL则默认为NULL
、表中第一个TIMESTAMP列不会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性,需要显式声明。
、表中TIMESTAMP列声明为NOT NULL时,不会自动创建默认值 当参数explicit_defaults_for_timestamp设置为0时:
、TIMESTAMP列如果没有明确指定为NLL,则默认为NOT NULL
、如果TIMESTAMP列明确指定为NULL,则会增加默认值NULL
、表中的第一个TIMESTAMP列,如果没有声明NULL属性、DEFAULT或者 ON UPDATE,会自动分配 DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP 属性。
、表中第二个TIMESTAMP列,如果没有声明为NULL或者DEFAULT子句,会定义为DEFAULT ’-- ::′。插入行时没有指明改列的值,该列默认为’-- ::′,不会产生警告。 TIMESTAMP列的默认属性严重依赖于参数explicit_defaults_for_timestamp设置,因此建议在创建时显示声明TIMESTAMP列的各项属性,避免因参数设置不同而导致逻辑问题!

时间戳字段在MySQL各版本的差异

时间戳字段在MySQL各版本的差异
、在MySQL .5及之前版本中,仅能对一个时间戳字段定义DEFUALT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP,但在MySQL .6和MySQL .7版本中取消了该限制。
、在MySQL .6版本中参数explicit_defaults_for_timestamp默认值为1;
、在MySQL .7版本中参数explicit_defaults_for_timestamp默认值为0; 、当定于c1 timestamp 时,
在MySQL .5中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
在MySQL .6中等价于`c1` timestamp NULL DEFAULT NULL;
在MySQL .7中等价于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; 、当定于c1 timestamp default 0时,
在MySQL .5中等价于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';
在MySQL .6中等价于`c1` timestamp NULL DEFAULT '0000-00-00 00:00:00';
在MySQL .7中等价于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';

时间戳建议

、在只关心数据最后更新时间的情况下,建议将时间戳列定义为TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;
、在关心创建时间和更新时间的情况下,将创建时间定义为DAETIME或 TIMESTAMP DEFAULT '0000-00-00 00:00:00',并在插入记录时显式指定创建时间;
、建议在表中只定义单个时间戳列,请显式定义DEFAULT 和 ON UPDATE属性;
、建议仅在必要的情况下对时间戳列进行显式插入和更新
、当time_zone=system的时候,查询timestamp字段,会调用系统的时区值做时区转换,在高并发或大数据量下,可能会触发CPU异常暴涨。

MySQL 基础--时间戳类型的更多相关文章

  1. MySQL 基础--字符类型

    ##=====================================================================================## MySQL支持的字符 ...

  2. mysql基础 日期类型

  3. mysql 基础,列类型

  4. Mysql基础1-基础语法-字段类型

    主要: 基础 字段类型 基础 基本概念 1) 数据库分类 层次数据库,网状数据库,关系数据库 常见:SQL Server, Oracle,infomix,sybase,ibmDB2,Mysql 2)数 ...

  5. { MySQL基础数据类型}一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型

    MySQL基础数据类型 阅读目录 一 介绍 二 数值类型 三 日期类型 四 字符串类型 五 枚举类型与集合类型 一 介绍 存储引擎决定了表的类型,而表内存放的数据也要有不同的类型,每种数据类型都有自己 ...

  6. Mysql的时间戳转date类型

    mysql 的 时间戳转date类型 select FROM_UNIXTIME(1491031706235/1000,'%Y-%m-%d') from dual;

  7. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  8. MYSQL基础笔记(六)- 数据类型一

    数据类型(列类型) 所谓数据烈性,就是对数据进行统一的分类.从系统角度出发时为了能够使用统一的方式进行管理,更好的利用有限的空间. SQL中讲数据类型分成三大类:1.数值类型,2.字符串类型和时间日期 ...

  9. MYSQL 基础操作

    1.MySQL基础操作 一:MySQL基础操作 1:MySQL表复制 复制表结构 + 复制表数据 create table t3 like t1; --创建一个和t1一样的表,用like(表结构也一样 ...

随机推荐

  1. python下彻底解决浏览器多标签打开与切换问题

    #coding:utf-8#Right_key_click and Tad switch#by dengpeiyou date:2018-7-7from selenium import webdriv ...

  2. leetcode406

    public class Solution { public int[,] ReconstructQueue(int[,] people) { ) { return new int[,] { }; } ...

  3. 深度学习原理与框架-Tfrecord数据集的制作 1.tf.train.Examples(数据转换为二进制) 3.tf.image.encode_jpeg(解码图片加码成jpeg) 4.tf.train.Coordinator(构建多线程通道) 5.threading.Thread(建立单线程) 6.tf.python_io.TFR(TFR读入器)

    1. 配套使用: tf.train.Examples将数据转换为二进制,提升IO效率和方便管理 对于int类型 : tf.train.Examples(features=tf.train.Featur ...

  4. Linux Shell 简介

    什么是 Shell Shell 是用户和 Linux 内核之间的接口程序,当从 Shell 或其他程序向 Linux 传递命令时,内核会做出相应的反应: Shell 是一个命令语言解释器,它拥有自己内 ...

  5. 数据预处理:独热编码(One-Hot Encoding)和 LabelEncoder标签编码

    一.问题由来 在很多机器学习任务中,特征并不总是连续值,而有可能是分类值. 离散特征的编码分为两种情况: 1.离散特征的取值之间没有大小的意义,比如color:[red,blue],那么就使用one- ...

  6. SQL Server中多表连接时驱动顺序对性能的影响

    本文出处:http://www.cnblogs.com/wy123/p/7106861.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...

  7. 关于EXCEPT和INTERSECT的用法和例子

    EXCEPT是指在第一个集合中存在,但是不存在于第二个集合中的数据. INTERSECT是指在两个集合中都存在的数据. select qq from #table1 如下: select qq fro ...

  8. MySQL事件不自动执行

    前台统计数据量很大,于是在数据库中新建了一个事件,每隔10分钟执行一次存储过程,向统计表中插入统计数据 但是创建完成后发现事件并不会自动执行,上网查了一下才知道必须手工开启才事件可以 查看事件开启状态 ...

  9. Intellij IDEA中maven更新不下来pom中的jar包,reimport失效

    问题: Intellij IDEA中使用maven reimport包,一直失败 即使我将本地已存在的一个jar包目录删除了,pom文件那里也没飘红提示找不到  解决方法: maven设置中去掉离线下 ...

  10. TaskScheduler

    一初始化 在SparkContext初始化的时候,同时初始化三个对象.DAGScheduler,TaskScheduler,SchedulerBackend.DAGScheduler,前面已经讲到,做 ...