为什么MySql DATETIME需要8个字节而不是6个字节?

时间:2014-04-08 07:49:18

标签: mysql database

MySql DATE占用3个字节,TIME占用3个字节,但DATETIME占用8个字节。我认为它应该是6字节(3 + 3)而不是8字节。这背后的逻辑是什么以及为什么使用额外的两个字节?

1 个答案:

答案 0 :(得分:6)

根据MySQL内部documentation,由于特定的存储要求,需要它:

+-----------+------------------------+---------------------+
|   YEAR    | 1 byte, little endian  |      Unchanged      |
+-----------+------------------------+---------------------+
|   DATE    | 3 bytes, little endian |      Unchanged      |
+-----------+------------------------+---------------------+
|           |                        | 3 bytes +           |
|   TIME    | 3 bytes, little endian | fractional-seconds  |
|           |                        | storage, big endian |
+-----------+------------------------+---------------------+
|           |                        | 4 bytes +           |
| TIMESTAMP | 4 bytes, little endian | fractional-seconds  |
|           |                        | storage, big endian |
+-----------+------------------------+---------------------+
|           |                        | 5 bytes +           |
| DATETIME  | 8 bytes, little endian | fractional-seconds  |
|           |                        | storage, big endian |
+-----------+------------------------+---------------------+

特别是,DATETIME有8个字节:

  • 4个字节:表示为YYYY×10000 + MM×100 + DD
  • 的日期的整数
  • 4个字节:表示为HH×10000 + MM×100 + SS
  • 的时间的整数

因此,重要的是要意识到输出表示和存储表示是两个非常不同的事情。如您所见,datetime的结构是两个整数,两个部分都有一些内部计算 - 日期和时间。