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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM