Должен ли я хранить DateTimes как Long (Ticks) в базе данных? - PullRequest
6 голосов
/ 04 марта 2011

Можно ли упростить жизнь, сохранив вместо этого значения DateTime как long?Кажется, всегда возникают проблемы при работе с нулевыми значениями DateTime, будь то сохранение или извлечение - нулевые DateTimes, недействительные DateTimes и т. Д. Всегда трудны для работы.

Желательно ли просто работать с типом данных long, поскольку вы всегда можете создать DateTime из галочек?

Редактировать: я работаю с SqlServer и MySql.SqlDateTime является производным .net DateTime.Существуют различия между всеми тремя платформами относительно того, что является действительным DateTime .Как вы справляетесь с этими различиями?

Ответы [ 4 ]

7 голосов
/ 04 марта 2011

Я полагаю, это зависит от личных предпочтений.Я всегда работаю с типами datetime и не беспокоюсь о них.

Если вы храните их как longs, хотя семантически они больше не даты.Если вы когда-нибудь хотели сделать запрос, чтобы выбрать все учетные записи, добавленные в пятницу (скажем), вам придется перепрыгнуть через несколько обручей, чтобы решить эту проблему.

4 голосов
/ 04 марта 2011

Лично я не могу придумать какой-либо непонятной причины, базы данных сами поддерживают DateTime, и сохраняя их до тех пор, пока вы в конечном итоге не выстрелите себе в ногу. Допустим, вам нужно иметь возможность выполнить запрос «Получите все строки между 3:00 и 18:00» - если вы храните их как тики, вам необходимо преобразовать их обратно в DateTime в базе данных.

Хранение их в виде галочек может препятствовать многим другим операциям, таким как группировка, сортировка, фильтрация и т. Д.

Если у вас есть нюансы с DateTimes в базе данных, такой как TimeZone, настоятельно рекомендуется нормализовать DateTime для определенного часового пояса, такого как UTC. Многие проблемы, с которыми команды сталкиваются в DateTime в базе данных, часто связаны с антисанитарным вводом, например, с ненормализацией TimeZone. Сохранение его в виде тиков по-прежнему будет иметь ту же проблему.

2 голосов
/ 27 ноября 2014

В некоторых случаях да. Sql хранит дату и время с меньшей точностью, чем DateTime. Это означает, что сохраненное и полученное значение может иметь значение DateTime, немного отличающееся от исходного объекта, что может вызвать некоторые проблемы с упорядочением или сравнением.

2 голосов
/ 04 марта 2011

Нет, используйте столбец datetime.

При работе со значениями DateTime всегда возникают проблемы

Если ваш столбец обнуляем, и выпо какой-то причине возникают трудности, когда тип столбца datetime, у вас также могут возникнуть проблемы, когда тип столбца long.

... недопустимо DateTimes

Как вы получаете недопустимые даты в столбце datetime?Одна из целей использования столбца datetime для начала заключается в том, что такая проверка происходит до того, как данные могут быть вставлены.Гораздо более вероятно, что вы получите недопустимые значения datetime при использовании «голого» * ​​1018 *.

Наконец, использование long означает, что просмотр вашей базы данных с помощью простого SQL (select * from table) приведет к нечитаемым результатам.

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