Mysql

NULL DATE 是否使用與值一樣多的儲存空間?

  • May 10, 2021

我需要儲存一個可能有也可能沒有日期的 DATETIME 值。

我的選擇是:

starts DATETIME
0000-00-00 12:38:06
* ```
| starts_date DATE | starts_time TIME |
|------------------|------------------|
| NULL             | 12:38:06         |

如果一個NULL DATE值佔用 0 儲存空間,我可能會在大多數記錄上保存幾個字節(full 為 8 個DATETIME字節,just 為 3 個字節TIME)。但是,以下頁面說NULLs 仍然佔用與固定長度列上的實際值一樣多的儲存空間,例如CHARvs. VARCHAR。是否DATE也考慮固定長度?

如果您使用的是 MyISAM,請不要。

如果你發現DATETIME是 8 個字節,那麼你使用的是舊版本的 MySQL;現在只需要 5 個字節。升級。

“Fixed”對 MyISAM 稍微重要;對於 InnoDB 來說很少重要。所以不用擔心。特別是,除非您有十億行,否則不要擔心。

對於 InnoDB 表

Helpful Notes About NULLs: 

對於第三行,我在 FIELD2 和 FIELD3 中插入​​了 NULL。因此,在欄位起始偏移中,這些欄位的最高位是打開的(值是 94 十六進制,94 十六進制,而不是 14 十六進制,14 十六進制)。並且行更短,因為 NULL不佔用空間

https://dev.mysql.com/doc/internals/en/innodb-field-contents.html

對於 MyISAM 表

您至少需要一些空間來放置 thge 標頭,但它應該非常小

查看確切的https://dev.mysql.com/doc/internals/en/myisam-introduction.html

引用自:https://dba.stackexchange.com/questions/291228