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