datetime timestamp year date time

drop table test;
create table test (dt datetime, ts timestamp, y year, d date, t time);
insert into test values(now(),now(),now(),now(),now());
select * from test;
2018-07-14 21:55:13 , 2018-07-14 21:55:13, 2018, 2018-07-14, 21:55:13


timestamp

1、timestamp 值返回后显示为“YYYY-MM-DD HH:MM:SS”格式的字符串,显示宽度固定为 19 个字符。如果想要获得数字值,应在 timestamp 列添加+0。
select ts+0 from test; // 20180714215513

2、系统给 timestamp 自动创建默认值 current_timestamp
drop table test;
create table test(id timestamp);
insert into test values(null);
select * from test; // 2007-07-04 16:37:24

注意,MySQL只给表中的第一个timestamp字段设置默认值为系统日期,如果有第二个timestamp类型,则默认值设置为0值。
alter table test add id2 timestamp;
insert into test values(null, null);
select * from test; // 2018-07-14 21:04:15 0000-00-00 00:00:00

可以修改id2的默认值为其他常量日期,但是不能再修改为current_timestmap,因为MySQL规定timestamp类型字段只能有一列的默认值为current_timestmap,如果强制修改,系统会报错。
drop table test;
create table test(id timestamp, id2 timestamp);
alter table test alter column id2 set default current_timestamp; // 报错
alter table test alter column id2 set default 20180714215513;

3、timestamp还有一个重要特点,就是和时区相关。当插入日期时,会先转换为本地时区后存放;而从数据库里面取出时,也同样需要将日期转换为本地时区后显示。这样,两个不同时区的用户看到的同一个日期可能是不一样的。
drop table test;
create table test (
`id1` timestamp not null default current_timestamp,
`id2` datetime default null
)
show variables like 'time_zone'; // SYSTEM 查看当前时区,我们在中国,这里的“SYSTEM”实际是东八区(+8:00)
insert into t8 values(now(), now());
select * from t8;
| 2007-09-25 17:26:50 | 2007-09-25 17:26:50 |
修改时区为东九区: set time_zone='+9:00';
select * from t8;
| 2007-09-25 18:26:50 | 2007-09-25 17:26:50 |


timestamp和datetime的表示方法非常类似,区别主要有以下几点。

1、timestamp支持的时间范围较小,其取值范围从19700101080001到2038年的某个时间,而datetime是从1000-01-01 00:00:00到9999-12-31 23:59:59,范围更大。
2、表中的第一个timestamp列自动设置为系统时间。如果在一个timestamp列中插入null,则该列值将自动设置为当前的日期和时间。在插入或更新一行但不明确给timestamp列赋值时也会自动设置该列的值为当前的日期和时间,当插入的值超出取值范围时,mysql认为该值溢出,使用“0000-00-00 00:00:00”进行填补。
3、timestamp的插入和查询都受当地时区的影响,更能反应出实际的日期。而datetime则只能反应出插入时当地的时区,其他时区的人查看数据必然会有误差的。

mysql 日期时间类型的更多相关文章

  1. mysql日期时间类型总结

    MySQL 日期类型:日期格式.所占存储空间.日期范围 比较.  日期类型        存储空间       日期格式                 日期范围  ------------ ---- ...

  2. Mysql 日期时间类型详解

    MySQL 中有多种数据类型可以用于日期和时间的表示,不同的版本可能有所差异,表3-2 中列出了MySQL 5.0 中所支持的日期和时间类型. 这些数据类型的主要区别如下: * 如果要用来表示年月日 ...

  3. mysql 日期时间类型 自动转型 及 运算

    日期时间类型自动转型 -- now().字符串.数字转datetime类型 create table t(dt datetime);insert into t values(now());insert ...

  4. MySQL 日期时间类型怎么选?千万不要乱用!

    构建数据库写程序避免不了使用日期和时间,对于数据库来说,有多种日期时间字段可供选择,如 timestamp 和 datetime 以及使用 int 来存储 unix timestamp. 不仅新手,包 ...

  5. Mysql 建表时,日期时间类型选择

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  6. MySQL学习分享-->日期时间类型

    日期时间类型 ①如果要用来表示年月日时分秒,一般使用datetime类型: ②如果要用来表示年月日,一般使用date类型: ③如果要表示时分秒,一般使用time类型: ④如果只是表示年份,一般使用ye ...

  7. MySQL之日期时间类型

    mysql(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

  8. MySQL 中的日期时间类型

    日期时间类型中包含以下几种数据类型: DATE TIME DATETIME TIMESTAMP YEAR 各类型都有具体的取值范围,超出或非法的其他值时,MySQL 会回退到 0.TIMESTAMP ...

  9. MySQL建表时,日期时间类型选择

    MySQL(5.5)所支持的日期时间类型有:DATETIME. TIMESTAMP.DATE.TIME.YEAR. 几种类型比较如下: 日期时间类型 占用空间 日期格式 最小值 最大值 零值表示  D ...

随机推荐

  1. 剑指offer三十一之连数中1出现的次数(从1到n整数中1出现的次数

    一.题目 求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1.10.11.12.13因此共出现6次,但是对于后面问题他就没辙了. ...

  2. CentOS 安装Scrapy

    本文python版本是python3.5.3,关于升级python和安装pip请到:http://www.cnblogs.com/technologylife/p/6242115.html 安装相关包 ...

  3. 使用json-lib-*.jar的JSON解析工具类

    使用json-lib-2.4-jdk15.jar JSON工具类: import java.util.List; import net.sf.json.JSONArray; import net.sf ...

  4. switch开关

    1.开关按钮 效果如下图 2.css代码 .form-switch{ display: inline-block; } .form-switch input[type="checkbox&q ...

  5. docker 容器启动后立马退出的解决方法

    原因: 容器同时只能管理一个进程,如果这个进程结束了容器就退出了,但是不表示容器只能运行一个进程(其他进程可在后台运行),但是要使容器不退出必须要有一个进程在前台执行.   解决方案: 启动脚本最后一 ...

  6. Ethereum 源码分析之 accounts

    一.Account // Account represents an Ethereum account located at a specific location defined // by the ...

  7. mongodb-分组分页

    1, 添加测试数据 @Test public void save() { News n = null; ; i < ; i++) { n = new News(); n.setTitle(&qu ...

  8. Velocity学习笔记

    一.为什么要使用velocity? 很多人下载了EasyJWeb的开源应用示例,但是对动态页面模板文件中的标签使用不是很熟悉,这里简单介绍一下.EasyJWeb特定把视图限定为Velocity,因为我 ...

  9. linux svn 开机启动

    在/etc/init.d中建立svnboot,内容如下: #!/bin/bash if [ ! -f "/usr/bin/svnserve" ] then echo "s ...

  10. composer windows安装

    一.下载安装包安装 https://getcomposer.org/download/(由于墙的限制,可能下载可执行文件失败,即使成功,由于网络的原因,安装的时候也可能会失败,所以建议用第二种方法) ...