Разница между разными форматами даты / времени в 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 вы имеете толькорешить, нужно ли вам хранить дату, время или и то и другое.