MySQL中datetime類型後邊跟的數字

問題描述

數據庫中新建表的時候,需要用到datetime類型,起初sql語句都是開發人員設計好表格之後,提交專門的數據庫人員來進行格式化,包括增加索引等。直到有一天,數據庫人員不負責格式化了,忽然發現datetime後邊也跟的有一個後綴:(3),去網上搜索了下一時竟也找不到令人滿意的解釋。如此過去了半年,有一天領導問到這個後綴是幹嘛的,支支吾吾難以描述,於是再來研究下datetime。

問題解釋

苦苦尋覓,終於找到一段英文,有了一個詳細的解釋,大概意思就是說這個後綴是用來定義毫秒的精度的。

A DATETIME or TIMESTAMP value can include a trailing fractional seconds part in up to microseconds (6 digits) precision. In particular, any fractional part in a value inserted into a DATETIME or TIMESTAMP column is stored rather than discarded. With the fractional part included, the format for these values is ‘YYYY-MM-DD HH:MM:SS[.fraction]’, the range for DATETIME values is ‘1000-01-01 00:00:00.000000’ to ‘9999-12-31 23:59:59.999999’, and the range for TIMESTAMP values is ‘1970-01-01 00:00:01.000000’ to ‘2038-01-19 03:14:07.999999’. The fractional part should always be separated from the rest of the time by a decimal point; no other fractional seconds delimiter is recognized. For information about fractional seconds support in MySQL, see Section 11.3.6, “Fractional Seconds in Time Values”.

內心激動呀,必須碼幾行!

數據庫實踐

1.建表

CREATE TABLE test_datetime_suffix
(
   ID BIGINT NOT NULL,
   TIME1 DATETIME  NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '時間1',
   TIME2 DATETIME (3) NOT NULL DEFAULT CURRENT_TIMESTAMP (3) ON UPDATE CURRENT_TIMESTAMP (3) COMMENT '時間2',
   TIME3 DATETIME (6) NOT NULL DEFAULT CURRENT_TIMESTAMP (6) ON UPDATE CURRENT_TIMESTAMP (6)COMMENT '時間3',
   TIME4 DATETIME (8) NOT NULL DEFAULT CURRENT_TIMESTAMP (8) ON UPDATE CURRENT_TIMESTAMP (8) COMMENT '時間4',
   PRIMARY KEY (ID)
)COMMENT '測試datetime類型後綴數字表';

從圖中可以看到,後綴最大精度是6,超過就會報錯。把TIME4這個字段刪了,就可以成功建表了。
在這裏插入圖片描述

2.插入幾條記錄

在這裏插入圖片描述
從圖中可以看到,TIME1沒有毫秒值,TIME2毫秒值有3位,TIEM3有6位,恰好對應建表時datetime後綴中的數字。

後記

原來建表時清一色的:datetime (3),導致數據庫中存儲的時間有3位毫秒值,展示到頁面上時就會被測試人員懟回來要優化,都會調用MYSQL自帶的DATEFORMAT函數進行格式化,現在才發現原來是這個毫秒值在搞鬼,如果不是對時間精度要求特別高,還是使用datetime不加任何後綴來得更爽些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章