Если вы хотите сохранить ссылку времени в базе данных, вы должны использовать один из типов базы данных предоставляют вам. Я объясню это с помощью MySQL (именно тот, который я использовал больше всего), но объяснение должно быть похоже на других серверах баз данных.
Если вы используете timestamp
столбец, который будет использоваться только 4 байт памяти, который всегда хороший новый, так как это делает меньшие показатели, использует меньше памяти во временных таблицах во внутренних операций базы данных и так далее. Тем не менее, timestamp
имеет меньший диапазон, чем datetime
, так что вы сможете только для хранения значений с 1970 года до 2038 года более или менее
Если вы используете datetime
вы будете иметь возможность хранить более широкий диапазон (от 1001 года до 9999 г.) с той же точностью (второй). Плохое следствие заключается в том, что для более высокого диапазона требуется больше памяти, что делает его немного медленнее.
Существуют и другие различия между этими двумя типами столбцов, которые не соответствуют этому ответу, но вы должны следить за тем, чтобы решить.
Если вы используете varchar
, который является типом столбца по умолчанию для атрибутов текста в Ruby On Rails, вы будете вынуждены конвертировать из текста в DateTime и наоборот каждый раз, когда вам нужно использовать это поле. Кроме того, упорядочение или фильтрация в этом столбце будет очень неэффективной, поскольку базе данных необходимо будет преобразовать все строки в даты перед фильтрацией или сортировкой, что делает невозможным использование индексов в этом столбце.
Если вам нужно суб-секундный точность, вы можете использовать bigint
, чтобы удовлетворить ваши требования, поскольку MySQL не обеспечивает дату определенного типа для этой цели
В общем, я рекомендую использовать timestamp
если ваш требования к применению соответствуют ограничению timestamp
. В противном случае используйте datetime
, но я решительно препятствую вам использовать varchar
для этой цели.
EDIT: Форматирование
Путь хранить даты в базе данных полностью отличается от того, как вы отобразить его пользователю. Вы можете создать объект DateTime
, используя DateTime.new(year, month, day, hour, minute, second)
и назначить этот объект своей модели. Когда вы сохраните его в базе данных, ActiveRecord будет отвечать за преобразование объекта DateTime в соответствующий формат базы данных.
Чтобы отобразить значение, которое уже хранится в базе данных в определенном формате (в представлении, ответе API и т. Д.), Вы можете просмотреть другие сообщения, например this one.
Спасибо! Нужно ли мне преобразовать дату в любом конкретном формате для ее сохранения: timestamp или: datetime? Потому что я получу дату как месяц DD, YYYY и время как часы: min: sec am/pm от пользователя –