Почему дата-время занимает 8 байтов в хранилище данных, например MySQL, c# - PullRequest
0 голосов
/ 05 августа 2020

Как мой заголовок, почему дата занимает 8 байтов, дата занимает 3, время занимает 3?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Фактические требования к хранилищу для полей даты / времени зависят от двух вещей:

  • Представление. Обычно это количество так как и диапазон поддерживаемых дат, например от '1000-01-01' до '9999-12-31' для MySQL.
  • Ограничения структуры хранения, т.е. нам, вероятно, потребуется используйте кратные байты для хранения данных (т.е. мы не можем легко сохранить что-то, используя, например, 2,36 байта ...)

Что касается MySQL date , диапазон равен '1000 -01-01 'до' 9999-12-31 ', или 9000 лет (плюс-минус), и нам нужна гранулярность дня. Таким образом, нам нужно сохранить количество дней с эпохи (1000-01-01) до 9000 * 365 = 3285000. Поскольку число 0-3285000, мы не можем использовать 2 байта (максимум 65536), и мы используем 3 (макс. 16777216). Да, это больше, чем нам нужно, но у нас не может быть дробей байта.

Что касается MySQL времени , диапазон от '-838: 59: 59' до ' 838: 59: 59 '(его можно использовать для представления продолжительности / интервала, а не только времени суток), что составляет примерно 6040800 секунд. Снова нам нужно 3 байта для этого.

Что касается MySQL datetime , диапазон от '1000-01-01 00: 00: 00.000000' до '9999-12-31 23 : 59: 59.999999 '. Здесь огромная разница в точности, теперь он может удерживать 9000 лет с точностью до 0,000001 секунды! Вот почему нам нужно 8 байтов для хранения даты и времени.

0 голосов
/ 05 августа 2020

Время занимает 3 плюс переменное количество дробных секунд . MySQL datetimes теперь занимает 5 байтов плюс такое же количество переменных.

...