В Ruby on Rails, в чем разница между DateTime, Timestamp, Time и Date? - PullRequest
395 голосов
/ 14 октября 2010

По моему опыту, правильное определение даты / времени, когда программирование всегда чревато опасностями и сложностями.

Ruby и Rails всегда ускользали от меня, хотя бы из-за огромного количества опций; Я никогда не представляю, что мне следует выбрать.

Когда я использую Rails и смотрю на типы данных ActiveRecord, я могу найти следующие

: дата и время,: отметка времени,: время и: дата

и понятия не имею, в чем различия или где скрываются ошибки.

Какая разница? Для чего вы их используете?

(П.С. Я использую Rails3)

Ответы [ 2 ]

546 голосов
/ 14 октября 2010

Разница между разными форматами даты / времени в ActiveRecord не имеет ничего общего с Rails и не имеет ничего общего с любой базой данных, которую вы используете.

Использование MySQL в качестве примера (если по какой-либо другой причине, потому что этосамый популярный), у вас есть типы столбцов DATE, DATETIME, TIME и TIMESTAMP;так же, как у вас есть CHAR, VARCHAR, FLOAT и INTEGER.

Итак, вы спросите, в чем разница?Ну, некоторые из них говорят сами за себя.DATE хранит только дату, TIME хранит только время суток, в то время как DATETIME хранит и то, и другое.

Разница между DATETIME и TIMESTAMP немного более тонкая: DATETIMEотформатирован как YYYY-MM-DD HH:MM:SS.Допустимые диапазоны варьируются от 1000 до 9999 года (и все, что между ними. Хотя TIMESTAMP выглядит похожим, когда вы извлекаете его из базы данных, на самом деле это просто фронт для unix timestamp. Его допустимый диапазон - с 1970 по 2038 год. Разница здесь, помимо различных встроенных функций в ядре базы данных, заключается в объеме памяти, поскольку DATETIME хранит каждую цифру в году, дне месяца, часе,минуты и секунды, он использует в общей сложности 8 байтов. TIMESTAMP хранит только количество секунд с 1970-01-01, использует 4 байта.

Вы можете прочитать больше о разнице между временемформаты в MySQL здесь .

В конце концов, все сводится к тому, для чего нужен столбец даты / времени. Вам нужно хранить даты и время до 1970 или после 2038 года?Используйте DATETIME. Вам нужно беспокоиться о размере базы данных, и вы находитесь в пределах этого временного диапазона? Используйте TIMESTAMP. Вам нужно только сохранить дату? Используйте DATE. Вам нужно только сохранить время? ИспользоватьTIME.

Сказав все это, Rails фактически принимает некоторые из этих решений за вас .:timestamp и :datetime по умолчанию будут DATETIME, а :date и :time соответствуют DATE и TIME соответственно.

Это означает, что в Rails вы имеете толькорешить, нужно ли вам хранить дату, время или и то и другое.

12 голосов
/ 13 октября 2017
  1. : дата / время (8 байт)

    • Сохраняет дату и время в формате ГГГГ-ММ-ДД ЧЧ: ММ: СС
    • Полезно для столбцов, таких как дата рождения
  2. : отметка времени (4 байта)

    • Количество секунд с 1970-01-01
    • Полезно для таких столбцов, как updated_at, creation_at
  3. : дата (3 байта)
    • Дата хранения
  4. : время (3 байта)
    • Время магазинов
...