mysql中 datatime与timestamp的区别说明_Mysql

来源:脚本之家  责任编辑:小易  

mysql中有三种日期类型:

date(年-月-日)

create table test(hiredate date);

datetime(日期时间类型)

create table test(hiredate datetime)

timestamp(邮戳类型,保存年-月-日 时-分-秒)

create table test(hiredate timestamp)

datetime 和timestamp的不同点

1、两者的存储方式不一样

对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。

2、两者所能存储的时间范围不一样

timestamp所能存储的时间范围为:'1970-01-01 00:00:01.000000' 到 ‘2038-01-19 03:14:07.999999'。

datetime所能存储的时间范围为:'1000-01-01 00:00:00.000000' 到 ‘9999-12-31 23:59:59.999999'。

总结:TIMESTAMP和DATETIME除了存储范围和存储方式不一样,没有太大区别。当然,对于跨时区的业务,TIMESTAMP更为合适。

3、自动初始化和更新

自动初始化指的是如果对该字段(譬如上例中的hiredate字段)没有显性赋值,则自动设置为当前系统时间。

自动更新指的是如果修改了其它字段,则该字段的值将自动更新为当前系统时间。

它与“explicit_defaults_for_timestamp”参数有关。

默认情况下,该参数的值为OFF

mysql> show variables like '%explicit_defaults_for_timestamp%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| explicit_defaults_for_timestamp | OFF |
+---------------------------------+-------+
row in set (0.00 sec)

总结:timestamp有自动初始化和更新,当你update某条记录的时候,该列值会自动更新,这是和datatime最大的区别。

补充:DATETIME与TIMESTAMP的一些区别与问题

今天遇到一个问题,明明数据有更新,update_time字段却还停留在创建数据的时候。

按常理来说这个字段应该是自动更新的才对。

查了一下表结构,

`update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP

发现update_time字段的类型是datetime

由此牵扯出两个问题,(1)timestamp与datetime的区别;(2)CURRENT_TIMESTAMP为什么能用于datetime类型

timestamp与datetime的区别

a)DATETIME的默认值为null;TIMESTAMP的字段默认不为空(not null),默认值为当前时间(CURRENT_TIMESTAMP),如果不做特殊处理,并且update语句中没有指定该列的更新值,则默认更新为当前时间。

这个区别就解释了为什么平时我们都不用可以管这个字段就能自动更新了,因为多数时候用的是timestamp;而此处用的是datetime,不会有自动更新当前时间的机制,所以需要在上层手动更新该字段

b)DATETIME使用8字节的存储空间,TIMESTAMP的存储空间为4字节。因此,TIMESTAMP比DATETIME的空间利用率更高。

这个区别解释了为啥timestamp类型用的多

c)两者的存储方式不一样 ,对于TIMESTAMP,它把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,将其又转化为客户端当前时区进行返回。而对于DATETIME,不做任何改变,基本上是原样输入和输出。

d)两者所能存储的时间范围不一样

timestamp所能存储的时间范围为:'1970-01-01 00:00:01.000000' 到 ‘2038-01-19 03:14:07.999999';

datetime所能存储的时间范围为:'1000-01-01 00:00:00.000000' 到 ‘9999-12-31 23:59:59.999999'。

CURRENT_TIMESTAMP为什么能用于datetime类型

在mysql 5.6之前的版本,CURRENT_TIMESTAMP只能用于timestamp类型,

5.6版本之后,CURRENT_TIMESTAMP也能用于datetime类型了

select version()查了一下数据库发现确实版本是5.6.29

以上为个人经验,希望能给大家一个参考,也希望大家多多支持真格学网。如有错误或未考虑完全的地方,望不吝赐教。

您可能感兴趣的文章:mysql之TIMESTAMP(时间戳)用法详解MySQL的时间差函数TIMESTAMPDIFF、DATEDIFF的用法mysql 数据类型TIMESTAMP

  • 本文相关:
  • 安装mysql在最后的start service停住了解决方法
  • mysql 5.5.56免安装版配置方法
  • mysql存储过程中使用动态行转列
  • mysql官方手册学习笔记1 mysql简单上手
  • mysql临时表及分区表区别详解
  • step by step配置mysql复制的具体方法
  • winx64下mysql5.7.19的基本安装流程(详细)
  • mysql中key、primary key、unique key、index 的区别
  • mysql 一次向表中插入多条数据实例讲解
  • mysql 5.7.14 下载安装、配置与使用详细教程
  • mysql中,datetime与timestamp数据类型有什么区别?
  • MYSQL-datatime和timestamp的区别
  • mysql中Timestamp,time,datetime 区别??
  • mysql 中 datetime和 timestamp的区别
  • MySQL中datetime和timestamp的区别
  • mysql中DATETIME,DATE和TIMESTAMP的区别
  • MySQL中DATETIME,DATE和TIMESTAMP类型的区别
  • MySQL中date,year,datetime,timestamp和time数...
  • MySQL中datetime和timestamp的区别
  • mysql中DATETIME,DATE和TIMESTAMP的区别
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全mssqlmysqlmariadboracledb2mssql2008mssql2005sqlitepostgresqlmongodbredisaccess数据库文摘数据库其它首页mysql之timestamp(时间戳)用法详解mysql的时间差函数timestampdiff、datediff的用法mysql 数据类型timestamp安装mysql在最后的start service停住了解决方法mysql 5.5.56免安装版配置方法mysql存储过程中使用动态行转列mysql官方手册学习笔记1 mysql简单上手mysql临时表及分区表区别详解step by step配置mysql复制的具体方法winx64下mysql5.7.19的基本安装流程(详细)mysql 一次向表中插入多条数据实例讲解mysql 5.7.14 下载安装、配置与使用详细教程mysql安装图解 mysql图文安装教程can""""t connect to mysql servwindows下mysql5.6版本安装及配置mysql字符串截取函数substring的mysql创建用户与授权方法mysql提示:the server quit withmysql日期数据类型、时间类型使用mysql——修改root密码的4种方法mysql之timestamp(时间戳)用法mysql update语句的用法详解mysql免安装制作使用说明在centos上mysql数据库服务器配置方法mysql触发器运用于迁移和同步数据的实例教mysql主从同步快速设置方法浅析mysql之字符串函数mysql数据库的主从同步配置与读写分离从mysql复制功能中得到的一举三得实惠分析mysql主从数据库不同步的2种解决方法mac版修改mysql初始密码的方法mysql百万级数据量分页查询方法及其优化建
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved