mysql解决datetime与timestamp精确到毫秒的问题

CREATE TABLE `tab1` (
`tab1_id` VARCHAR(11) DEFAULT NULL,
`create` TIMESTAMP(3) NULL DEFAULT NULL,
`create2` DATETIME(3) DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8

SELECT * FROM tab1;

 

TIMESTAMP(3)与 DATETIME(3)意思是保留3位毫秒数

TIMESTAMP(6)与 DATETIME(6)意思是保留6位毫秒数

 

修改已存在的表字段示例:ALTER TABLE tb_financial MODIFY CREATE_TIME DATETIME(3) DEFAULT NULL COMMENT '录入时间';

 

 

 

 插入日期可以用NOW(3)来控制精确的毫秒数,SELECT CURRENT_TIMESTAMP(3);也是可以的

http://www.cnblogs.com/shihaiming/p/5853595.html

 

 

DEFAULT values in MySQL must be constants. They can't be functions or expressions (with the exception of CURRENT_TIMESTAMP).

Source: http://dev.mysql.com/doc/refman/5.6/en/data-type-defaults.html
http://stackoverflow.com/questions/27601482/add-date-time-as-default-value

DATETIME类型用在你需要同时包含日期和时间信息的值时。MySQL检索并且以'YYYY-MM-DD HH:MM:SS'格式显示DATETIME值,支持的范围是'1000-01-01 00:00:00'到'9999-12-31 23:59:59'。(“支持”意味着尽管更早的值可能工作,但不能保证他们可以。)

DATE类型用在你仅需要日期值时,没有时间部分。MySQL检索并且以'YYYY-MM-DD'格式显示DATE值,支持的范围是'1000-01-01'到'9999-12-31'。

TIMESTAMP列类型提供一种类型,你可以使用它自动地用当前的日期和时间标记INSERT或UPDATE的操作。

TIME数据类型表示一天中的时间。MySQL检索并且以"HH:MM:SS"格式显示TIME值。支持的范围是'00:00:00'到'23:59:59'

CREATE TABLE `tb_test` (  
  `id` int(11NOT NULL AUTO_INCREMENT,  
  `date1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00' ON UPDATE CURRENT_TIM  
ESTAMP,  
  `date2` date DEFAULT NULL,  
  `date3` datetime DEFAULT NULL,  
  `time` time DEFAULT NULL,  
  PRIMARY KEY (`id`)  
);  

日期类型         存储空间       日期格式                                      日期范围

datetime         8 bytes   YYYY-MM-DD HH:MM:SS   1000-01-01 00:00:00 ~ 9999-12-31 23:59:59
timestamp      4 bytes   YYYY-MM-DD HH:MM:SS   1970-01-01 00:00:01 ~ 2037-12-31 23:59:59
date                3 bytes   YYYY-MM-DD                      1000-01-01 ~ 9999-12-31


datetime和timestamp的区别:
1.datetime 的日期范围比较大;如果有1970年以前的数据还是要用datetime.但是timestamp 所占存储空间比较小。
2.timestamp 类型的列还有个特性:默认情况下,在 insert, update 数据时,timestamp 列会自动以当前时间(CURRENT_TIMESTAMP)填充/更新。

3.timestamp比较受时区timezone的影响以及MYSQL版本和服务器的SQL MODE的影响.

使用一个常用的格式集的任何一个,你可以指定DATETIME、DATE和TIMESTAMP值:
'YYYY-MM-DD HH:MM:SS'或'YY-MM-DD HH:MM:SS'格式的一个字符串,允许一种"宽松"的语法:任何标点可用作在日期部分和时间部分之间的分隔符。例如,'98-12-31 11:30:45'、'98.12.31 11+30+45'、'98/12/31 11*30*45'和'98@12@31 11^30^45'是等价的。
---------------------
作者:漱冰濯雪
来源:CSDN
原文:https://blog.csdn.net/shubingzhuoxue/article/details/52606645
版权声明:本文为博主原创文章,转载请附上博文链接!

 

 

 

date:你直接就可以理解为2017-3-21 不带时分秒的

datetime:相反,则是带时分秒的 

timestamp:时间戳 很好理解(1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。)

 

其中有提到时间范围的问题:

时间范围

date -- > '1000-01-01' to '9999-12-31'.

datetime --> '1000-01-01 00:00:00' to '9999-12-31 23:59:59'.

timestamp -- > '1970-01-01 00:00:01' UTC to '2038-01-19 03:14:07' UTC


常用日期函数以及转换

1、获取当前日期:
 CURRENT_DATE()或者CURDATE()

2、获取当前时间:
CURRENT_TIME()或者CURTIME()

3、获取当前日期和时间
NOW()或者CURRENT_TIMESTAMP()

4、linux/unix时间戳和mysql时间日期类型之间的转换:
UNIX_TIMESTAMP(NOW())                 //将mysql的datetime转换成linux/unix的时间戳;日期时间
UNIX_TIMESTAMP(DATE(NOW()))          //将mysql的date转换成linux/unix的日期。
UNIX_TIMESTAMP(TIME(NOW()))          //将mysql的time转换成linux/unix的时间。(用问题)
FROM_UNIXTIME(time_t)                //将unix的时间戳转换成mysql的datetime;日期时间
DATE(FROM_UNIXTIME(time_t))          //日期
TIME(FROM_UNIXTIME(time_t))          //时间
---------------------
作者:Swen码农
来源:CSDN
原文:https://blog.csdn.net/a3025056/article/details/62885104
版权声明:本文为博主原创文章,转载请附上博文链接!

 

posted @ 2016-12-05 19:42  沧海一滴  阅读(11599)  评论(0编辑  收藏  举报