1. 程式人生 > >MySQL中的datetime與timestamp比較

MySQL中的datetime與timestamp比較

相同

顯示

TIMESTAMP列的顯示格式與DATETIME列相同。換句話說,顯示寬度固定在19字元,並且格式為YYYY-MM-DD HH:MM:SS。

不同

範圍

datetime 以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支援的範圍為'1000-01-01 00:00:00'到'9999-12-31 23:59:59'TIMESTAMP值不能早於1970或晚於2037

儲存

TIMESTAMP

1.4個位元組儲存(Time stamp value is stored in 4 bytes)

2.值以UTC格式儲存( it stores the number of milliseconds)

3.時區轉化 ,儲存時對當前的時區進行轉換,檢索時再轉換回當前的時區。

datetime

1.8個位元組儲存(8 bytes storage)

2.實際格式儲存(Just stores what you have stored and retrieves the same thing which you have stored.)

3.與時區無關(It has nothing to deal with the TIMEZONE and Conversion.)

例項對比

現在我來做個時區對他們的影響。

1.先插入一個數據insert into `t8` values(now(), now());

2.改變客戶端時區(東9區,日本時區)。

3.再次顯示插入的資料,變化了,timestamp型別的資料 增加了 1個小時

接下來 討論一些timestamp 的其他的屬性

1.null 是否為空

timestamp 預設允許為 “非空”(not null by default), 如果你在定義“ts TIMESTAMP DEFAULT NULL” 是非法的。 可以指定為空 null ,“ts TIMESTAMP NULL" ,這時可以在新增語句改變預設值。

ts2 TIMESTAMP NULL DEFAULT 0,
ts3 TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP

2.there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

即一個表中只能有一個timestamp型別的欄位可以寫DEFAULT或者ON UPDATE,否則會報錯

如:下面這樣寫是不對的:

CREATE TABLE `t6` (                                                                  
          `p_c` int(11) NOT NULL,                                                            
          `p_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  `p_time2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        ) ENGINE=InnoDB DEFAULT CHARSET=gb2312   

3:只有第一個timestamp型別的欄位可以寫DEFAULT或者ON UPDATE,否則會報錯。

如:下面這樣寫是不對的:

CREATE TABLE `t4` (                                                                  
          `p_c` int(11) NOT NULL,                                                            
          `p_time` timestamp NOT NULL ,
  `p_time2` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
        ) ENGINE=InnoDB DEFAULT CHARSET=gb2312  

 會報錯:

 [Err] 1293 - Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

將其放在第一個欄位即可正常建表:

CREATE TABLE `t6` (                                                                  
          `p_c` int(11) NOT NULL,                                                            
          `p_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ,
  `p_time2` timestamp NOT NULL 
        ) ENGINE=InnoDB DEFAULT CHARSET=gb2312    

相關推薦

關於Mysqldatetime timestamp的區別

昨天在伺服器down了一個sql但是往mysql匯入時發現總是報錯 說是我的日期型別不符(之前是)datetime 型別的 之後又改成了 date 型別 ,再次匯入時又是相同的錯誤   好奇心下就上網查了點資料    DATETIME 與

MySQLdatetimetimestamp比較

相同 顯示 TIMESTAMP列的顯示格式與DATETIME列相同。換句話說,顯示寬度固定在19字元,並且格式為YYYY-MM-DD HH:MM:SS。 不同 範圍 datetime 以'YYYY-MM-DD HH:MM:SS'格式檢索和顯示DATETIME值。支援的範圍為'1000-01-0

mysql解決datetimetimestamp精確到毫秒的問題

times http null modify sta inno bsp reat alter CREATE TABLE `tab1` ( `tab1_id` VARCHAR(11) DEFAULT NULL, `create` TIMESTAMP(3) NULL D

Mysqldatetimetimestamp區別

sta mysql -m 時區 日期 timestamp 適應 tex 區別 DATETIME日期和時間的組合。支持的範圍是‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘。MySQL以‘YYYY-MM-DD HH:MM:SS‘格式顯示

MySQLDATETIME、DATE和TIMESTAMP類型的區別

有一個 pda not mat date_add after () day format 一、DATETIME 顯示格式:YYYY-MM-DD HH:MM:SS時間範圍:[ ‘1000-01-01 00:00:00‘到‘9999-12-31 23:59:59‘] 二、DAT

mysqldatetime、date、timestamp資料型別的區別

1、datetime資料型別表示同時包含日期和時間。 mysql檢索並且以'YYYY-MM-DD HH:MM:SS'格式顯示datatime值,支援的範圍是'1000-01-01 00:00:00'

Mysql Datetime Timestamp的區別和聯絡

原文地址 Datetime 與 Timestamp的區別和聯絡 一個完整的日期格式如下:YYYY-MM-DD HH:MM:SS[.fraction],它可分為兩部分:date部分和time部分,其中,date部分對應格式中的“YYYY-MM-DD”,time部分對應格式中的

mysqlEXISTSIN用法比較

1、使用方式: (1)EXISTS用法 select a.batchName,a.projectId from ucsc_project_batch a where EXISTS (select b.id from ucsc_project b where a.projectId = b.i

記錄問題:mysqldatetime型別欄位在後臺讀取前端展示

1.資料庫欄位型別為datetime,model裡:@Column(name = "createtime", length = 20) private Date createTime;2.兩種將資料傳到前端的方法方法一:List<Map<String, Objec

mysqlinexists效率比較

這條語句適用於a表比b表大的情況 select * from ecs_goods a where cat_id in(select cat_id from ecs_category); 這條語句適用於b表比a表大的情況select * from ecs_goods

mysql datetimetimestamp區別

datetime:  1、儲存格式為YYYYMMDDHHMMSS(年月日時分秒)的整數,所以,它與時區無關,存入的是什麼值就是什麼值,不會根據當前時區進行轉換。 2、從mysql 5.6.4中,可以

MySQLexistsin的使用 以及查詢效率比較

exists對外表用loop逐條查詢,每次查詢都會檢視exists的條件語句,當 exists裡的條件語句能夠返回記錄行時(無論記錄行是的多少,只要能返回),條件就為真,返回當前loop到的這條記錄,反之如果exists裡的條 件語句不能返回記錄行,則當前loop到的這條

mysqldatetime比較大小

select sum(studychj) as tofflinejz from afterline where chec

MySQLlimitmax同時使用時查詢為空的情況

嵌套查詢 下使用 spa get name ack question 使用 如果 一般情況下使用limit進行分頁時通常是第一頁就用max和min這些函數去求值,這樣的情況是正常的,但是如果limit去到了第二頁的時候發現這樣用是不行的,原因未知! 修改的方式如下,適合大

MySQLMyISAMInnoDB區別及選擇,mysql添加外鍵

title 必須 pan 就會 默認 簡化 平臺 兩種 myisam InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面

MySQL RedoBinlog順序一致性問題 【轉】

事務 sync GC 文檔 per ora 需要 步驟 基本思想 首先,我們知道在MySQL中,二進制日誌是server層的,主要用來做主從復制和即時點恢復時使用的。而事務日誌(redo log)是InnoDB存儲引擎層的,用來保證事務安全的。現在我們來討論一下MySQL

mysql Varchar char的區別

計算機 一個 個數 arc eat 每一個 set span 方式 一、字符與字節與編碼關系 ASCII碼中,一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。一個二進制數字序列,在計算機中作為一個數字單元,一般為8位二進制數,換算為十進制。最小值0

MySQLMyISAMInnoDB區別及選擇

重建 包含 好的 數據 mysql 備份 處理 表空間 種類 InnoDB:支持事務處理等不加鎖讀取支持外鍵支持行鎖不支持FULLTEXT類型的索引不保存表的具體行數,掃描表來計算有多少行DELETE 表時,是一行一行的刪除InnoDB 把數據和索引存放在表空間裏面跨平臺可

MySQLMyISAMInnoDB區別

原文:https://blog.csdn.net/frycn/article/details/70158313?utm_source=copy  InnoDB:支援事務處理等不加鎖讀取支援外來鍵支援行鎖不支援FULLTEXT型別的索引不儲存表的具體行數,掃描表來計算有多少行DELETE 表時,是一

mysqlInnoDBMyISAM的區別

兩者的區別: 1. InnoDB支援事務,MyISAM不支援,對於InnoDB每一條SQL語言都預設封裝成事務,自動提交,這樣會影響速度,所以最好把多條SQL語言放在begin和commit之間,組成一個事務; 2. InnoDB支援外來鍵,而MyISAM不支援。對一個包含外來鍵的InnoDB錶轉為MYI