亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

MySQL中datetime和timestamp的區別及使用詳解

2020-01-18 20:38:43
字體:
來源:轉載
供稿:網友

一、MySQL中如何表示當前時間?

其實,表達方式還是蠻多的,匯總如下:

CURRENT_TIMESTAMP

CURRENT_TIMESTAMP()

NOW()

LOCALTIME

LOCALTIME()

LOCALTIMESTAMP

LOCALTIMESTAMP()

二、關于TIMESTAMP和DATETIME的比較

一個完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分為兩部分:date部分和time部分,其中,date部分對應格式中的“YYYY-MM-DD”,time部分對應格式中的“HH:MM:SS[.fraction]”。對于date字段來說,它只支持date部分,如果插入了time部分的內容,它會丟棄掉該部分的內容,并提示一個warning。

如下所示:

mysql> create table test(id int,hiredate date);Query OK, 0 rows affected (0.01 sec)mysql> insert into test values(1,'20151208000000');Query OK, 1 row affected (0.00 sec)mysql> insert into test values(1,'20151208104400');Query OK, 1 row affected, 1 warning (0.01 sec)mysql> show warning;ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'warning' at line 1mysql> select * from test;+------+------------+| id  | hiredate  |+------+------------+|  1 | 2015-12-08 ||  1 | 2015-12-08 |+------+------------+2 rows in set (0.00 sec)

注:第一個沒提示warning的原因在于它的time部分都是0

TIMESTAMP和DATETIME的相同點:

1> 兩者都可用來表示YYYY-MM-DD HH:MM:SS[.fraction]類型的日期。

 TIMESTAMP和DATETIME的不同點:

1> 兩者的存儲方式不一樣

對于TIMESTAMP,它把客戶端插入的時間從當前時區轉化為UTC(世界標準時間)進行存儲。查詢時,將其又轉化為客戶端當前時區進行返回。

而對于DATETIME,不做任何改變,基本上是原樣輸入和輸出。

下面,我們來驗證一下

首先創建兩種測試表,一個使用timestamp格式,一個使用datetime格式。

mysql> create table test(id int,hiredate timestamp);Query OK, 0 rows affected (0.01 sec)mysql> insert into test values(1,'20151208000000');Query OK, 1 row affected (0.00 sec)mysql> create table test1(id int,hiredate datetime);Query OK, 0 rows affected (0.01 sec)mysql> insert into test1 values(1,'20151208000000');Query OK, 1 row affected (0.00 sec)mysql> select * from test;+------+---------------------+| id  | hiredate      |+------+---------------------+|  1 | 2015-12-08 00:00:00 |+------+---------------------+1 row in set (0.01 sec)mysql> select * from test1;+------+---------------------+| id  | hiredate      |+------+---------------------+|  1 | 2015-12-08 00:00:00 |+------+---------------------+1 row in set (0.00 sec)

兩者輸出是一樣的。

其次修改當前會話的時區

mysql> show variables like '%time_zone%'; +------------------+--------+| Variable_name  | Value |+------------------+--------+| system_time_zone | CST  || time_zone    | SYSTEM |+------------------+--------+2 rows in set (0.00 sec)mysql> set time_zone='+0:00';Query OK, 0 rows affected (0.00 sec)mysql> select * from test;+------+---------------------+| id  | hiredate      |+------+---------------------+|  1 | 2015-12-07 16:00:00 |+------+---------------------+1 row in set (0.00 sec)mysql> select * from test1;+------+---------------------+| id  | hiredate      |+------+---------------------+|  1 | 2015-12-08 00:00:00 |+------+---------------------+1 row in set (0.01 sec)

上述“CST”指的是MySQL所在主機的系統時間,是中國標準時間的縮寫,China Standard Time UT+8:00

通過結果可以看出,test中返回的時間提前了8個小時,而test1中時間則不變。這充分驗證了兩者的區別。

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更為合適。

三、關于TIMESTAMP和DATETIME的自動初始化和更新

首先,我們先看一下下面的操作

mysql> create table test(id int,hiredate timestamp);Query OK, 0 rows affected (0.01 sec)mysql> insert into test(id) values(1);Query OK, 1 row affected (0.00 sec)mysql> select * from test;+------+---------------------+| id  | hiredate      |+------+---------------------+|  1 | 2015-12-08 14:34:46 |+------+---------------------+1 row in set (0.00 sec)mysql> show create table test/G*************************** 1. row ***************************    Table: testCreate Table: CREATE TABLE `test` ( `id` int(11) DEFAULT NULL, `hiredate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)

看起來是不是有點奇怪,我并沒有對hiredate字段進行插入操作,它的值自動修改為當前值,而且在創建表的時候,我也并沒有定義“show create table test/G”結果中顯示的“ DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP”。

其實,這個特性是自動初始化和自動更新(Automatic Initialization and Updating)。

自動初始化指的是如果對該字段(譬如上例中的hiredate字段)沒有顯性賦值,則自動設置為當前系統時間。

自動更新指的是如果修改了其它字段,則該字段的值將自動更新為當前系統時間。

它與“explicit_defaults_for_timestamp”參數有關。

默認情況下,該參數的值為OFF,如下所示:

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

下面我們看看官檔的說明:

By default, the first TIMESTAMP column has both DEFAULT CURRENT_TIMESTAMP and ON UPDATE CURRENT_TIMESTAMP if neither is specified explicitly。

很多時候,這并不是我們想要的,如何禁用呢?

1. 將“explicit_defaults_for_timestamp”的值設置為ON。

2. “explicit_defaults_for_timestamp”的值依舊是OFF,也有兩種方法可以禁用

     1> 用DEFAULT子句該該列指定一個默認值

     2> 為該列指定NULL屬性。

如下所示:

mysql> create table test1(id int,hiredate timestamp null);Query OK, 0 rows affected (0.01 sec)mysql> show create table test1/G*************************** 1. row ***************************    Table: test1Create Table: CREATE TABLE `test1` ( `id` int(11) DEFAULT NULL, `hiredate` timestamp NULL DEFAULT NULL) ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)mysql> create table test2(id int,hiredate timestamp default 0);Query OK, 0 rows affected (0.01 sec)mysql> show create table test2/G*************************** 1. row ***************************    Table: test2Create Table: CREATE TABLE `test2` ( `id` int(11) DEFAULT NULL, `hiredate` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00') ENGINE=InnoDB DEFAULT CHARSET=latin11 row in set (0.00 sec)

在MySQL 5.6.5版本之前,Automatic Initialization and Updating只適用于TIMESTAMP,而且一張表中,最多允許一個TIMESTAMP字段采用該特性。從MySQL 5.6.5開始,Automatic Initialization and Updating同時適用于TIMESTAMP和DATETIME,且不限制數量。

參考:

1. http://dev.mysql.com/doc/refman/5.6/en/datetime.html

2. http://dev.mysql.com/doc/refman/5.6/en/timestamp-initialization.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产日韩中文字幕在线| 亚洲色图在线观看| 欧美最顶级的aⅴ艳星| 久久久影视精品| 亚洲国产美女精品久久久久∴| 激情成人在线视频| 在线观看久久久久久| 久久精品国产69国产精品亚洲| 日韩av观看网址| 91精品视频在线看| 91av视频在线播放| 这里只有精品视频| 91网在线免费观看| 精品久久久国产精品999| 久久国产精品网站| 久久久国产精品视频| 97精品视频在线播放| 国产精品久久电影观看| 精品国产91久久久| 日本不卡免费高清视频| 欧美日韩午夜剧场| 亚洲精品免费在线视频| 欧美黑人一区二区三区| 欧美亚洲另类在线| 亚洲美女精品成人在线视频| 亚洲欧美制服第一页| 国自产精品手机在线观看视频| 国产成人av在线播放| 亚洲成人精品视频在线观看| 国产亚洲人成网站在线观看| 成人黄色在线播放| 91精品国产综合久久香蕉的用户体验| 7m精品福利视频导航| 国产亚洲成av人片在线观看桃| 成人天堂噜噜噜| 中文字幕一区电影| 最好看的2019年中文视频| 欧美日韩激情网| 国产精品1234| 九九热精品视频国产| 狠狠色噜噜狠狠狠狠97| 一区二区亚洲欧洲国产日韩| 欧美日韩国产限制| 超碰精品一区二区三区乱码| 成人乱人伦精品视频在线观看| 亚洲国产成人精品久久| 日韩经典中文字幕在线观看| 欧美日韩在线视频一区二区| 亚洲成av人片在线观看香蕉| 色偷偷888欧美精品久久久| 欧美日韩中文字幕| 成人精品视频久久久久| 在线观看免费高清视频97| 久久777国产线看观看精品| 狠狠操狠狠色综合网| 成人欧美在线视频| 欧美日韩国产成人| 97视频色精品| 亚洲国产欧美一区| 国产91精品在线播放| 精品二区三区线观看| 日韩高清人体午夜| 亚洲国产91精品在线观看| 久久97久久97精品免视看| 清纯唯美亚洲综合| 免费97视频在线精品国自产拍| 亚洲乱码一区av黑人高潮| 97色在线观看免费视频| 97精品久久久中文字幕免费| 精品久久久视频| 91精品在线看| 欧美另类高清videos| 国产日产欧美a一级在线| 欧美野外wwwxxx| 在线视频欧美日韩精品| 久久久久久久久久av| 国产精品久久久久久搜索| 久久777国产线看观看精品| 久久国产精品99国产精| 一色桃子一区二区| 亚洲第一页在线| 欧美日韩人人澡狠狠躁视频| 亚洲精品视频免费| 日韩在线免费视频观看| 国产97免费视| 亚洲精品在线视频| 97碰碰碰免费色视频| 欧美国产视频日韩| 国产一区二区三区三区在线观看| 日韩在线免费高清视频| 日韩在线播放av| 欧美色道久久88综合亚洲精品| 亚洲国产精久久久久久久| 亚洲精美色品网站| 日韩在线观看免费高清完整版| 亚洲国产精久久久久久| 欧美日韩激情小视频| 91系列在线观看| 亚洲香蕉成人av网站在线观看| 日本高清不卡的在线| 在线日韩中文字幕| 中文字幕在线视频日韩| 国内伊人久久久久久网站视频| 成人在线中文字幕| 色www亚洲国产张柏芝| 米奇精品一区二区三区在线观看| 日韩福利伦理影院免费| 精品日韩中文字幕| 中文字幕亚洲精品| 91av视频导航| 久久综合免费视频影院| 欧美激情一区二区久久久| 国产日产亚洲精品| 精品国产网站地址| 在线午夜精品自拍| 91在线|亚洲| 欧美激情精品久久久久久大尺度| 国产精品视频免费观看www| 欧美成人免费视频| 97人洗澡人人免费公开视频碰碰碰| 日韩av电影手机在线观看| 亚洲人成电影在线| 曰本色欧美视频在线| 成人写真视频福利网| 久久99国产精品自在自在app| 国产精品海角社区在线观看| 91高潮精品免费porn| 亚洲最新在线视频| 91亚洲国产成人精品性色| 在线观看国产精品日韩av| 成人高清视频观看www| 精品人伦一区二区三区蜜桃网站| 欧美午夜激情小视频| 一区二区三区久久精品| 亚洲一区二区三区在线免费观看| 日韩国产激情在线| 亚洲精品456在线播放狼人| 欧美日韩视频免费播放| 亚洲tv在线观看| 日韩有码在线观看| 91久久久亚洲精品| 青青草国产精品一区二区| 日韩视频精品在线| 中文字幕在线看视频国产欧美在线看完整| 国产精品视频久| 日韩极品精品视频免费观看| 亚洲国产91精品在线观看| 国产精品久久久久91| 久久精品99久久久香蕉| 好吊成人免视频| 日韩av电影免费观看高清| 97在线精品视频| 国内成人精品视频| 国产日韩在线亚洲字幕中文| 中文字幕v亚洲ⅴv天堂| 性夜试看影院91社区| 亚洲日本欧美中文幕| 日韩美女免费线视频| 日韩精品在线观看网站| 亚洲欧美激情一区| 91精品国产91久久久久久最新| 精品国产一区二区三区久久狼5月| 亚洲欧洲激情在线| 久久国产精品亚洲|