久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    MySQL的時間戳timestamp datetime

     一本正經地胡鬧 2019-08-08

    轉載

    生產環境中部署著各種版本的MySQL,包括MySQL 5.5/5.6/5.7三個大版本和N個小版本,由于MySQL在向上兼容性較差,導致相同SQL在不同版本上表現各異,下面從幾個方面來詳細介紹時間戳數據類型。

     

    時間戳數據存取

      在MySQL上述三個大版本中,默認時間戳(Timestamp)類型的取值范圍為'1970-01-01 00:00:01' UTC 至'2038-01-19 03:14:07' UTC,數據精確到秒級別,該取值范圍包含約22億個數值,因此在MySQL內部使用4個字節INT類型來存放時間戳數據:

        1、在存儲時間戳數據時,先將本地時區時間轉換為UTC時區時間,再將UTC時區時間轉換為INT格式的毫秒值(使用UNIX_TIMESTAMP函數),然后存放到數據庫中。

        2、在讀取時間戳數據時,先將INT格式的毫秒值轉換為UTC時區時間(使用FROM_UNIXTIME函數),然后再轉換為本地時區時間,最后返回給客戶端。

     

      在MySQL 5.6.4及之后版本,可以將時間戳類型數據最高精確微秒(百萬分之一秒),數據類型定義為timestamp(N),N取值范圍為0-6,默認為0,如需要精確到毫秒則設置為Timestamp(3),如需要精確到微秒則設置為timestamp(6),數據精度提高的代價是其內部存儲空間的變大,但仍未改變時間戳類型的最小和最大取值范圍。

     

     

     

    時間戳字段定義

      時間戳字段定義主要影響兩類操作:

      1、插入記錄時,時間戳字段包含DEFAULT CURRENT_TIMESTAMP,如插入記錄時未指定具體時間數據則將該時間戳字段值設置為當前時間

      2、更新記錄時,時間戳字段包含ON UPDATE CURRENT_TIMESTAMP,如更新記錄時未指定具體時間數據則將該時間戳字段值設置為當前時間

     

      PS1:CURRENT_TIMESTAMP表示使用CURRENT_TIMESTAMP()函數來獲取當前時間,類似于NOW()函數

     

      根據上面兩類操作,時間戳列可以有四張組合定義,其含義分別為:

      1、當字段定義為timestamp,表示該字段在插入和更新時都不會自動設置為當前時間。

      2、當字段定義為timestamp DEFAULT CURRENT_TIMESTAMP,表示該字段僅在插入且未指定值時被賦予當前時間,再更新時且未指定值時不做修改。

      3、當字段定義為timestamp ON UPDATE CURRENT_TIMESTAMP,表示該字段在插入且未指定值時被賦值為"0000-00-00 00:00:00",在更新且未指定值時更新為當前時間。

      4、當字段定義為timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,表示該字段在插入或更新時未指定值,則被賦值為當前時間。

     

      PS1:在MySQL中執行的建表語句和最終表創建語句會存在差異,建議使用SHOW CREATE TABLE TB_XXX獲取已創建表的建表語句。

     

    時間戳字段在MySQL各版本的使用差異

      1、在MySQL 5.5及之前版本中,僅能對一個時間戳字段定義DEFUALT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP,但在MySQL 5.6和MySQL 5.7版本中取消了該限制;

      2、在MySQL 5.6版本中參數explicit_defaults_for_timestamp默認值為1,在MySQL 5.7版本中參數explicit_defaults_for_timestamp默認值為0;

      3、在MySQL 5.5和MySQL 5.7版本中timestamp類型默認為NOT NULL,在在MySQL 5.6版本中timestamp類型默認為NULL;

      4、當建表語句中定于c1 timestamp 時,

        在MySQL 5.5中等價于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

        在MySQL 5.6中等價于`c1` timestamp NULL DEFAULT NULL;

        在MySQL 5.7中等價于`c1` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

      5、當建表語句中c1 timestamp default 0時,

        在MySQL 5.5中等價于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';

        在MySQL 5.6中等價于`c1` timestamp NULL DEFAULT '0000-00-00 00:00:00';

        在MySQL 5.7中等價于`c1` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00';

       

      PS1: MySQL 5.6版本和MySQL 5.7版本中主要差異受參數explicit_defaults_for_timestamp的默認值影響。

      PS2:當時間戳列的默認值為'0000-00-00 00:00:00'時,使用“不在時間戳取值范圍內”的該默認值并不會產生警告。

     

     

    時間戳類型引發的異常

      當MySQL參數time_zone=system時,查詢timestamp字段會調用系統時區做時區轉換,而由于系統時區存在全局鎖問題,在多并發大數據量訪問時會導致線程上下文頻繁切換,CPU使用率暴漲,系統響應變慢設置假死。

     

     

    時間戳類型和時間類型選擇

      在部分"數據庫指導"文檔中,會推薦使用timestamp類型代替datetime字段,其理由是timestamp類型使用4字節,而datetime字段使用8字節,但隨著磁盤性能提升和內存成本降低,在實際生產環境中,使用timestamp類型并不會帶來太多性能提升,反而可能因timestamp類型的定義和取值范圍限制和影響業務使用。

     

      在MySQL 5.6.4及之后版本,可以將時間戳類型(timestamp)數據最高精確微秒,也同樣可以將時間類型(datetime)數據最高精確微秒,時間類型(datetime)同樣可以獲得timestamp類型相同的效果,如將字段定義為 dt1 DATETIME(3) NOT NULL DEFAULT NOW(3) ON UPDATE NOW(3); 時間類型(datetime)的存取范圍'1000-01-01 00:00:00.000000' 至 '9999-12-31 23:59:59.999999',能更好地存放各時間段的數據。

     

     

    時間戳類型使用建議

      1、在只關心數據最后更新時間的情況下,建議將時間戳列定義為TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

      2、在關心創建時間和更新時間的情況下,建議將更新時間設置為時間戳字段,將創建時間定義為DAETIME 或 TIMESTAMP DEFAULT '0000-00-00 00:00:00',并在插入記錄時顯式指定創建時間;

      3、建議在表中只定義單個時間戳列,并顯式定義DEFAULT 和 ON UPDATE屬性;

      4、雖然在MySQL中可以對時間戳字段賦值或更新,但建議僅在必要的情況下對時間戳列進行顯式插入和更新;

      5、建議將time_zone參數設置為system外的值,如中國地區服務器設置為'+8:00';

      6、建議將MySQL線下測試版本和線上生產版本保持一致。


      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 农村熟女大胆露脸自拍 | 亚洲色欲色欱WWW在线| 久久天堂综合亚洲伊人HD妓女| 丰满人妻被黑人猛烈进入| 久久毛片少妇高潮| 亚洲欧美偷拍另类A∨| 欧美国产日韩A在线观看| 国产亚洲精品AA片在线播放天| 97人人添人澡人人爽超碰| 亚洲最大成人在线播放| 国产精品久久久久AV福利动漫| 成人无码午夜在线观看| 国产成人MV视频在线观看| 国内精品久久久久影院网站 | 亚洲AV无码之国产精品网址| 亚洲高潮喷水无码AV电影| 日本乱偷人妻中文字幕在线| 国产普通话刺激视频在线播放| 亚洲精品55夜色66夜色| 日本一区二区三区专线| 东京热一精品无码av| 国产亚洲欧美另类一区二区| 无码国内精品久久人妻蜜桃| 少妇愉情理伦片BD| 亚洲成人av在线系列| 天天摸天天做天天爽2020| 十八禁午夜福利免费网站| 亚洲AV中文无码乱人伦在线咪咕| 久久被窝亚洲精品爽爽爽| caoporn成人免费公开| 丰满人妻AV无码一区二区三区| 天天澡日日澡狠狠欧美老妇 | 亚洲AV无码不卡私人影院| 日本XXXX色视频在线观看免费不卡 | 国产AV激情久久无码天堂| 国产精品自在拍首页视频| 最新亚洲av日韩av二区| 亚洲国产精品久久一线不卡| 日韩免费无码一区二区三区| 2021国产精品视频网站| 男女扒开双腿猛进入爽爽免费看|