Почему MySql DATETIME занимает 8 байтов вместо 6 байтов?
дата MySql занимает 3 байта, а время занимает 3 байта, но DATETIME занимает 8 байтов. Я предполагаю, что это должно быть 6 байтов (3+3) вместо 8 байтов. Какова логика этого и почему используются дополнительные два байта?
1 ответов
согласно MySQL internals документация, это необходимо из-за специфических требований к хранению:
+-----------+------------------------+---------------------+ | 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-это два целых числа с некоторыми внутренними вычислениями для обеих частей-даты и времени.