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

Vis*_*u Y 6 mysql database

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

Alm*_* Do 6

根据MySQL内部文档,由于特定的存储要求,它是必需的:

+-----------+------------------------+---------------------+
|   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的结构是两个整数,两个部分都有一些内部计算 - 日期和时间.

  • 当您在没有 before-mysql-5.6.4 和 after-mysql-5.6.4 标头的情况下复制此表时,会很混乱。 (2认同)