Дата и время Rails в файле миграции одинаковы для MySQL и Sqlite3? - PullRequest
8 голосов
/ 07 сентября 2010

:datetime и :timestamp в файле миграции выглядят одинаково в MySQL и Sqlite3, и они оба сопоставляются с datetime на стороне базы данных, за исключением того, что я не могу найти это в формальной документации.

Кроме того, как насчет того, когда, если наш проект Rails может использовать другие СУБД, тогда мы должны использовать :datetime или :timestamp, когда мы script/generate (или rails generate) нашей Модели или Скаффолда?

1 Ответ

14 голосов
/ 07 сентября 2010

Я бы рекомендовал использовать :datetime, потому что так понятно, что использовать. Я полагаю, что rails использует DATETIME для обоих в БД из-за проблемы, связанной с тем, что datetime можно представить с помощью метки времени unix или поля MySQL TIMESTAMP. Поскольку временная метка по умолчанию является 32-битным целым числом (см. Wikipedia: Timestamp ), она может представлять даты только между 1901-12-13 (или 1970-01-01, если не допускаются отрицательные значения, как в MySQL ). и 2038-01-19. После или до этого он будет переполнен. Это проблема 2038 года .

Итак, чтобы всем было понятно, я бы назвал это :datetime в процессе миграции.

Тип данных TIMESTAMP имеет диапазон от '1970-01-01 00:00:01' UTC до '2038-01-19 03:14:07' UTC. Он имеет различные свойства в зависимости от версии MySQL и режима SQL, в котором работает сервер. Эти свойства описаны далее в этом разделе. Источник

...