日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

MySQL之DATETIME與TIMESTAMP的時間精度問題

瀏覽:182日期:2023-02-18 16:43:43
目錄
  • datetime與timestamp時間精度問題
    • 默認時間精度與最大時間精度
    • 更改數據庫中所有指定字段的類型的存儲過程(用于修正時間精度)
  • MySQL中選datetime還是timestamp呢?
    • 1. 基本區別
    • 2. 其他特性
    • 3. 什么場景下用什么類型合適呢?
    • 4.BIGINT使用(占8字節)
  • 總結

    datetime與timestamp時間精度問題

    • 默認時間精度與最大時間精度
    • 更改數據庫中所有指定字段的類型的存儲過程(用于修正時間精度)

    默認時間精度與最大時間精度

    -- 創建數據庫CREATE DATABASE mydb_1;-- 查看創建數據庫建表語句(默認編碼UTF8)SHOW CREATE DATABASE mydb_1;-- 創建表-- 測試datetime的精度CREATE TABLE test(	-- 默認精度為0	-- Maximum is 6.	datetime1 DATETIME,	datetime2 DATETIME(3),	datetime3 DATETIME(5));INSERT INTO test VALUES("2020-11-22 12:01:01.59999", "2020-11-22 12:01:01.59999", "2020-11-22 12:01:01.59999");INSERT INTO test VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.599", "2020-11-22 12:01:01.59999");INSERT INTO test VALUES("2020-11-22 12:01:01.4", "2020-11-22 12:01:01.594", "2020-11-22 12:01:01.59994");INSERT INTO test VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.5995", "2020-11-22 12:01:01.599995");INSERT INTO test VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.5994", "2020-11-22 12:01:01.599994");-- 創建表-- 測試timestamp的精度CREATE TABLE test11(	-- 默認精度為0	-- Maximum is 6.	datetime1 TIMESTAMP,	datetime2 TIMESTAMP(3),	datetime3 TIMESTAMP(5));INSERT INTO test1 VALUES("2020-11-22 12:01:01.59999", "2020-11-22 12:01:01.59999", "2020-11-22 12:01:01.59999");INSERT INTO test1 VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.599", "2020-11-22 12:01:01.59999");INSERT INTO test1 VALUES("2020-11-22 12:01:01.4", "2020-11-22 12:01:01.594", "2020-11-22 12:01:01.59994");INSERT INTO test1 VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.5995", "2020-11-22 12:01:01.599995");INSERT INTO test1 VALUES("2020-11-22 12:01:01.5", "2020-11-22 12:01:01.5994", "2020-11-22 12:01:01.599994");

    更改數據庫中所有指定字段的類型的存儲過程(用于修正時間精度)

    -- 結束符修改為$$DELIMITER $$DROP PROCEDURE IF	EXISTS batch_alter_column_type $$CREATE PROCEDURE batch_alter_column_type ( 	sch_name VARCHAR ( 128 ), -- 庫名稱	from_col_name VARCHAR ( 32 ), -- 修改的字段	to_col_type VARCHAR ( 32 ) -- 修改之后的字段類型) BEGIN  -- 當前表名	DECLARE tbl_name VARCHAR ( 64 );  -- 當前字段名	DECLARE col_name VARCHAR ( 64 );	-- 游標結束標記	DECLARE i_done INT ( 1 );	-- 修改的SQL語句	DECLARE SQL_FOR_ALTER VARCHAR ( 1024 );	-- 聲明游標,存儲要修改表和字段	DECLARE mycursor CURSOR FOR 	   SELECT C.TABLE_NAME, C.COLUMN_NAME 		 FROM INFORMATION_SCHEMA.COLUMNS C		 LEFT JOIN INFORMATION_SCHEMA.TABLES T		 ON C.TABLE_NAME = T.TABLE_NAME		 AND C.TABLE_SCHEMA = T.TABLE_SCHEMA	   WHERE C.TABLE_SCHEMA = sch_name  -- 字符串類型轉換	   AND TABLE_TYPE   = "BASE TABLE"	 		 AND COLUMN_NAME  = from_col_name;	-- 游標中的內容執行完后將標記設置為1  	DECLARE CONTINUE HANDLER FOR NOT FOUND SET i_done = 1;  -- 打開游標		OPEN mycursor;  -- 執行循環		Lp:LOOP			-- 取出游標中的值		FETCH mycursor INTO tbl_name,col_name;	  -- 如果標記為1,退出循環		IF i_done = 1 THEN 			 LEAVE Lp;		END IF;		-- 構造修改語句		SET SQL_FOR_ALTER = CONCAT( "ALTER TABLE ", tbl_name, " MODIFY COLUMN ", col_name, " ", to_col_type );		-- 給局部變量賦值		SET @SQL = SQL_FOR_ALTER;		-- 預處理SQL語句		PREPARE stmt FROM @SQL;		-- 執行SQL語句		EXECUTE stmt;	END LOOP;	-- 釋放游標	CLOSE mycursor;END$$-- 調用存儲過程DELIMITER ;call batch_alter_column_type("mydb_1","MODISTAMP", "datetime(3)");

    使用ALTER修改表的字段

    • CHANGE:可修改表列名稱和屬性
    • MODIGY:只可修改表列的屬性
    -- 修改test表中datetime1字段屬性為DATETIME(3)ALTER TABLE test MODIFY COLUMN datetime1 DATETIME(3);-- 修改test表中datetime1字段名稱為datetime11,屬性為DATETIME(2)ALTER TABLE test CHANGE datetime1 datetime11 DATETIME(2);

    MySQL中選datetime還是timestamp呢?

    1. 基本區別

    類型所占字節格式范圍TIMESTAMP4字節YYYY-MM-DD HH:MM:SS1970-01-01 00:00:01utc到2038-01-19 03:14:07utcDATETIME5字節YYYY-MM-DD HH:MM:SS1000-01-01 00:00:00到9999-12-31 23:59:59DATE3字節YYYY-MM-DD1000-01-01到9999-12-31TIME3字節HH:MM:SS-838:59:59到838:59:59YEAR1字節YYYY1901到2155

    注:MySQL 5.6.4 之前,占 8 個字節 ,之后版本,占 5 個字節。

    2. 其他特性

    1. TIMESTAMP是以utc格式存儲,會自動檢索當前時區對時間進行轉換,而DATETIME不會。

    2. 存入null時,TIMESTAMP會自動存儲當前時間,而DATETIME存儲null值。

    3. 時間計算:

    DATETIME翻譯為漢語即"時間戳",它是當前時間到 Unix元年(1970 年 1 月 1 日 0 時 0 分 0 秒)的秒數。對于某些時間的計算,如果是以 DATETIME 的形式會比較困難,假如我是 1994-1-20 06:06:06 出生,現在的時間是 2016-10-1 20:04:50 ,那么要計算我活了多少秒鐘, DATETIME還需要函數進行轉換,但是 TIMESTAMP 直接相減就行。

    3. 什么場景下用什么類型合適呢?

    1.需要跨時區計算時間用 或者 需要自動更新時間的TIMESTAMP

    計算一架從北京飛往紐約的飛機的飛行時間。這個場景中,如果使用 TIMESTAMP 來存時間,起飛和降落時間的值,都會被轉換成 UTC 時間,所以它們直接相減即可獲得結果。但如果使用 DATATIME 格式存時間,還需要進行轉換,才可以完成,容易出錯。

    2.記錄創建修改時間 或者 時間范圍大于2038 用DATETIME

    DATATIME作為記錄時間,現在都已經2022年了,很快就到2038年啦,使用DATATIME不需要擔心超過范圍。

    當然在兩者都滿足使用的情況下,所占字節越小越好,TIMESTAMP比DATATIME好。

    4.BIGINT使用(占8字節)

    還有一種情況,即不用TIMESTAMP也不用DATATIME,而是用BIGINT。存儲自紀元以來的毫秒數(如果使用的是 Java,則用 System.currentTimeMillis() 獲取當前時間)

    這樣有幾個優點:

    1. 可以在遷移數據庫時避免因為數據類型差異。比如MySQL的DATETIME類型和Oracle的DATETIME類型之間可能存在差異,timestamp類型的精度可能也存在差異,MySQL的timestamp精度不是一開始就支持毫秒精度的。

    2. 沒有時區問題。無論是哪個時區,因為開始計算的時間不同,無論當前時間如何,跨度是一致的。也沒有timestamp和datatime的范圍問題。是對timestamp的補充。

    3. InnoDB存儲引擎下,通過時間范圍查找,性能bigint > datetime > timestamp,通過時間排序,性能bigint > timestamp > datetime。綜合來講,bigint性能最好。

    總結

    以上為個人經驗,希望能給大家一個參考,也希望大家多多支持。

    標簽: MySQL
    相關文章:
    日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
    欧美日韩中出| 西西人体一区二区| 日韩专区一卡二卡| 欧美中文一区二区| 欧美成a人免费观看久久| 国产一区二区三区网| 免费一区二区三区在线视频| 97久久亚洲| 亚洲一区二区小说| 亚洲字幕久久| 日韩精品三区四区| 四虎成人精品一区二区免费网站| 亚洲精品护士| 欧美天堂一区| 精品国产麻豆| 日韩久久电影| 蜜桃视频欧美| 一区在线免费| 免费在线观看日韩欧美| 亚洲久草在线| 日韩高清欧美激情| 国产精品一区二区中文字幕| 国产高清视频一区二区| 久久不卡日韩美女| 98精品久久久久久久| 成人羞羞在线观看网站| 亚洲精品在线观看91| 视频一区免费在线观看| 日韩精品高清不卡| 国产精品乱战久久久| 国产一区二区三区不卡视频网站| 国产精品精品| 欧美 日韩 国产精品免费观看| 午夜欧美理论片| 亚洲一区二区三区四区电影| 欧美日韩一区二区三区四区在线观看| 国产精品亚洲欧美一级在线| 久久电影tv| 日韩网站中文字幕| 丝袜美腿高跟呻吟高潮一区| 日本va欧美va瓶| 免费日韩一区二区三区| 中文字幕在线看片| 国产亚洲毛片在线| 日韩av一二三| 91青青国产在线观看精品| 激情六月综合| 日韩av三区| 一区二区三区四区日本视频| 爽好多水快深点欧美视频| 国产精品久久久久久久久免费高清 | 国产欧美一区二区色老头| 乱一区二区av| 亚洲天堂久久| 日韩精品亚洲专区| 中文在线中文资源| 免费日韩一区二区| 欧美成人精品午夜一区二区| 久久九九精品| 日韩高清不卡在线| 蜜桃av.网站在线观看| 亚洲一区二区三区久久久| 老司机精品视频在线播放| 99久久激情| 综合亚洲视频| 日韩不卡免费高清视频| 青青青国产精品| 亚洲v在线看| 欧美日韩中文| 亚洲精品2区| 国产一区丝袜| 日韩在线成人| 日本精品在线中文字幕| 欧美日韩一区二区国产| 91久久国产| 黄色aa久久| 欧美日韩网址| 日韩精品一级二级| 久久久久久久久丰满| 日本综合精品一区| 免费视频国产一区| 嫩呦国产一区二区三区av| 美女国产一区| 久久精品官网| 国产成人免费| 国产九九精品| 亚洲乱码久久| 激情视频一区二区三区| 美女视频黄免费的久久| 亚洲综合福利| 尤物精品在线| 久久国产毛片| 国产一区二区三区四区二区| 亚洲精品影视| 欧美另类专区| 色老板在线视频一区二区| 美女性感视频久久| 中文字幕一区二区精品区| 精精国产xxxx视频在线播放| 国产精品免费99久久久| 亚洲视频二区| 黄色精品网站| 色综合www| 福利精品在线| 欧美韩一区二区| 欧美日韩xxxx| 日韩欧美三区| 中文字幕亚洲影视| av一区二区高清| 精品视频亚洲| 国产乱子精品一区二区在线观看 | 亚洲大片在线| 国产精品yjizz视频网| 麻豆91小视频| 麻豆精品视频在线观看| 欧美视频久久| 97精品久久| 91免费精品国偷自产在线在线| 中文字幕一区二区av| 免费在线观看不卡| 欧美日韩精品一本二本三本| 久久影视一区| 久久精品导航| 亚洲国产综合在线看不卡| 欧美日韩在线播放视频| 精品三级久久| 99精品电影| 亚洲无线一线二线三线区别av| 久久精品官网| 伊人久久婷婷| 首页欧美精品中文字幕| 一区二区国产精品| 最新国产精品| 91麻豆精品| 欧美国产日韩电影| 麻豆精品av| 国产中文在线播放| 久久国产欧美| 在线综合亚洲| 亚洲tv在线| 国产精品一站二站| 韩国一区二区三区视频| 日韩免费一区| 午夜日韩av| 日韩精品第一| 免费在线观看一区| 日韩欧美午夜| 夜夜嗨一区二区| 青青草国产精品亚洲专区无| 国产精品久久| 精品视频97| 久久精品电影| 免费久久精品视频| 国产精品网在线观看| 精品免费av| 激情五月综合网| 最新亚洲国产| 国产精品白浆| 日本免费久久| 蜜臀va亚洲va欧美va天堂| 国产日韩三级| 桃色一区二区| 蜜臀久久99精品久久久画质超高清 | 欧美日韩精品一本二本三本| 亚洲香蕉视频| 久久久亚洲欧洲日产| 激情黄产视频在线免费观看| 日韩午夜免费| 国产欧美三级| 欧洲亚洲一区二区三区| 久久亚洲二区| 麻豆精品久久久| 久久久久久久久丰满| 男女激情视频一区| 国产精品二区影院| 99精品一区| 91国内精品| 成人羞羞在线观看网站| 少妇精品久久久一区二区| 精品国产日韩欧美精品国产欧美日韩一区二区三区 | 国产精品最新| 久久蜜桃资源一区二区老牛| 一区二区三区四区精品视频| 久久精品午夜| 亚洲在线免费| 免费在线欧美黄色| 伊人久久大香线蕉av超碰演员| 久久国内精品| 午夜精品一区二区三区国产| 91精品啪在线观看国产爱臀| 欧美影院三区| 国产精品一区二区免费福利视频| 国产字幕视频一区二区| 国产亚洲高清一区| 午夜精品免费| 国产 日韩 欧美 综合 一区| 日本欧美在线看| 日韩国产一区| 国产欧美在线| 亚洲一区观看|