MySql DATE占用3个字节,TIME占用3个字节,但DATETIME占用8个字节。我认为它应该是6字节(3 + 3)而不是8字节。这背后的逻辑是什么以及为什么使用额外的两个字节?
答案 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个字节:
YYYY×10000 + MM×100 + DD
HH×10000 + MM×100 + SS
因此,重要的是要意识到输出表示和存储表示是两个非常不同的事情。如您所见,datetime的结构是两个整数,两个部分都有一些内部计算 - 日期和时间。