хранение дат и времени в mysql

12
_ROBOT
На сайте с 07.02.2006
Offline
109
1979

Сейчас дата хранится в INT в unixtime.

Если я буду хранить дату в DATETIME или TIMESTAMP в чём мне это даст выйгрыш?

У кого как дата хранится?

"Мы роботы-бездельники, не любим понедельники..."
[umka]
На сайте с 25.05.2008
Offline
456
#1

Хранение в DATETIME и TIMESTAMP даст выигрыш при выборке с использованием функций работы с датами.

Лог в помощь!
_ROBOT
На сайте с 07.02.2006
Offline
109
#2

На скорость, на память есть различия?

Orangesoda
На сайте с 22.08.2010
Offline
17
#3

Пусть лучше хранится в INT

E
На сайте с 03.12.2010
Offline
140
#4

по-моему при выборке без разницы

[umka]
На сайте с 25.05.2008
Offline
456
#5
Orangesoda:
Пусть лучше хранится в INT

Всё-таки, форматы хранения дат и времени не просто так придумали, согласитесь :)

Если все запросы на выборку ограничиваются лишь условиями "больше" или "меньше" определённой даты/времени, то можно хранить и в формате INT.

Если же запись/выборка из базы делается, например, с учётом часовых поясов, с учётом перевода часов на летнее время, или с какими-либо вычислениями дат, то несомненно лучше использовать специальные форматы.

(Пример: выбрать из базы всех пользователей, зарегистрировавшихся в последнюю пятницу каждого месяца)

Orangesoda
На сайте с 22.08.2010
Offline
17
#6
Всё-таки, форматы хранения дат и времени не просто так придумали, согласитесь
Если все запросы на выборку ограничиваются лишь условиями "больше" или "меньше" определённой даты/времени, то можно хранить и в формате INT.
Если же запись/выборка из базы делается, например, с учётом часовых поясов, с учётом перевода часов на летнее время, или с какими-либо вычислениями дат, то несомненно лучше использовать специальные форматы.
(Пример: выбрать из базы всех пользователей, зарегистрировавшихся в последнюю пятницу каждого месяца)

Да ладно, форматы хранения дат придумали, чтобы не читать числа типа 71234091284.

INT'ы по определению сравниваются быстрее.

По поводу последней пятницы каждого месяца, где в DATETIME или TIMESTAMP хранится про пятницу? Для подобных случаев лучше дату форматировать в PHP (Python, Ruby, Perl, Java по вкусу) и =хранить в базе как VARCHAR

Хранение в DATETIME и TIMESTAMP даст выигрыш при выборке с использованием функций работы с датами.

Вот с этим соглашусь.

[umka]
На сайте с 25.05.2008
Offline
456
#7
Orangesoda:
Да ладно, форматы дат придумали, чтобы не читать числа типа 71234091284.
INT'ы по определению сравниваются быстрее.

Только при сравнениях типа "если дата=N" или "если дата<N" или "если дата>N" и им подобных.

Orangesoda:
По поводу последней пятницы каждого месяца, где в DATETIME или TIMESTAMP хранится про пятницу? Для подобных случаев лучше дату форматировать в PHP (Python, Ruby, Perl, Java по вкусу) и =хранить в базе как VARCHAR

Вы же не знаете, как на самом деле MySQL хранит внутри себя даты в форматах DATETIME и TIMESTAMP.

Если вы думаете, что в том же формате, в котором дата отдаётся при выборке SELECT-ом из такой колонки, то вы заблуждаетесь :)

Это всего лишь отображение (формат отображения, но не хранения), и да, он таки для удобства восприятия программиста.

Если в базе миллионы строк и вам нужно делать выборки с вычислением дат, то если всё хранить в varchar и парсить на php, то придётся каждый раз делать полную выборку.

Orangesoda
На сайте с 22.08.2010
Offline
17
#8
Вы же не знаете, как на самом деле MySQL хранит внутри себя даты в форматах DATETIME и TIMESTAMP.
Если вы думаете, что в том же формате, в котором дата отдаётся при выборке SELECT-ом из такой колонки, то вы заблуждаетесь
Это всего лишь отображение (формат отображения, но не хранения), и да, он таки для удобства восприятия программиста.

Здравия желаю, товарищ капитан!


Если в базе миллионы строк и вам нужно делать выборки с вычислением дат, то если всё хранить в varchar и парсить на php, то придётся каждый раз делать полную выборку.

А скажите уважаемый, как же быть с последней ПЯТНИЦЕЙ месяца?

где в DATETIME или TIMESTAMP хранится про пятницу?

ТС, проведите тесты и все!

[umka]
На сайте с 25.05.2008
Offline
456
#9
Orangesoda:
А скажите уважаемый, как же быть с последней ПЯТНИЦЕЙ месяца?

Если хранить даты в datetime или timestamp, то можно будет одним sql-запросом сразу получить нужные строки.

Orangesoda
На сайте с 22.08.2010
Offline
17
#10
Если хранить даты в datetime или timestamp, то можно будет одним sql-запросом сразу получить нужные строки.

И каков же запрос?

Orangesoda добавил 18.12.2010 в 12:35

Вы же не знаете, как на самом деле MySQL хранит внутри себя даты в форматах DATETIME и TIMESTAMP.

Вообще-то, знаю.

DATETIME - число вида YYYYMMDDHHMMSS

TIMESTAMP - число, равное количеству секунд, прощедшее сами знаете с какого момента

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий