datetime是8個位元組?

aoerqileng發表於2022-10-20

之前的印象中datetime一直是佔用8個位元組,從來沒去關注過是否正確,在解析資料檔案的時候,datetime欄位後面跟了一個timestamp欄位,在解析timestamp時候,總是不對,後來發現是datetime欄位解析有問題。

datetime欄位的儲存

1 bit  sign            (used when on disk)
17 bits year*13+month   (year 0-9999, month 0-12)
5 bits day             (0-31)
5 bits hour            (0-23)
6 bits minute          (0-59)
6 bits second          (0-59)
24 bits microseconds    (0-999999)
Total: 64 bits = 8 bytes

如果datetime沒有microseconds部分,那麼這3個位元組是沒有的,也就是隻佔用了5個位元組。


測試表

master [localhost] {msandbox} (test) > show create table dba_user6\G
*************************** 1. row ***************************
       Table: dba_user6
Create Table: CREATE TABLE `dba_user6` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(100) DEFAULT NULL COMMENT '使用者名稱',
  `class` varchar(100) DEFAULT NULL COMMENT 'class',
  `account` int(11) DEFAULT NULL,
  `version` int(11) DEFAULT NULL,
  `ctime` datetime DEFAULT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

所以跟開發要講明白些,datetime沒有 microseconds是5個位元組,有是8個位元組。


不要總是說datetime 佔用空間大

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25719946/viewspace-2919360/,如需轉載,請註明出處,否則將追究法律責任。

相關文章