Ruby on Rails: почему ActiveRecord использует тип «datetime» вместо «timestamp» для полей timestamp? - PullRequest
7 голосов
/ 20 февраля 2011

В моем файле миграции базы данных я вставил строку:

t.timestamps

Как я и ожидал, были созданы два столбца: "updated_at" и "creation_at". Однако их типом является «дата-время», а не «отметка времени».

Я использую MySQL и тип "timestamp", как я понимаю, предназначен именно для таких случаев , поскольку он использует меньше места и не зависит от часового пояса.

Итак, есть ли причина, по которой Rails 3 использует «datetime», а не «timestamp»? Должен ли я попытаться это исправить? Если да, есть ли способ сделать это, кроме того, чтобы не использовать "t.timestamps" и определять столбцы "updated_at" и "creation_at" отдельно каждый раз для каждой новой таблицы?

Ответы [ 2 ]

5 голосов
/ 20 февраля 2011

По памяти тип столбца mysql timestamp ведет себя подобно updated_at в том смысле, что он обновляется с текущим временем при каждом обновлении записи.

Хотя это полезно для столбца updated_at, это не желаемое поведение для created_at.

Кроме того, Rails обрабатывает часовой пояс, указанный в настройках вашего приложения (обычно он должен быть установлен в UTC), поэтому использование времени mysql может быть несовместимо с другими записями datetime.

0 голосов
/ 30 октября 2015
Столбцы

timestamp имеют ограниченный диапазон, который начинается в 1970 году и заканчивается в 2038 году. Для получения дополнительной информации вы можете воспользоваться Google Unix Millennium Bug, но это в основном потому, что временные метки Unix хранятся как 32-разрядное целое число со знаком. Отметка времени выражается в секундах с 1 января 1970 года, а число оборачивается в 2038 году. По этой причине я обычно использую datetime, даже когда timestamp кажется более простым решением, особенно для представления исторических или прогнозируемых данных. дальше в прошлое или будущее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...