Страница 2 из 4

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 17:42
zelenin
Nerf писал(а):С часовыми поясами :mrgreen: Иногда надуманные. :lol: База вернет, то что сохранили. Если правильно не отформатировать, то на фронте мб дата в будущем например, не?
проблема проггера. если проект поддерживает зоны, надо это учитывать.
Nerf писал(а):
и ждем пока mysql все 2000000 строк сконвертирует в datetime
Это будет дольше, чем "огромный in с диапазонами"?!
уверен, что да. это будет ОЧЕНЬ долго.
Nerf писал(а):Как вы этот in представляете, не могу сходу понять?
ну а как вы найдете все субботы и воскресенья для int? in (created between (15654654,2656465) or .... or ... or ... or ...) итд. ни то ни другое не красиво.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 17:44
R3D3
Пользуясь случаем, попиарю PostgreSQL - работа с датами и временем на высочайшем уровне, намного круче чем в MySQL!
  • Специальный формат timestamp with timezone - забудьте про проблемы таймзон, база сделает все за вас.
  • Точность хранения времени до микросекунд - можно считать даже астрономические данные.
  • Любые кастомные подтипы времени, констрейнты, интервалы времени - один раз задекларировал, дальше база делает все за вас.
  • Широчайший и гибчайший выбор индексов для даты/времени - накладываете индекс по выражению + интервальный индекс, дальше ищете по timestamp полю с молниеносной скоростью и база делает все за вас.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 17:53
Nerf
уверен, что да. это будет ОЧЕНЬ долго.
В году ~52 недели, ~104 суббот и воскресений. Чтобы написать ваши условия, то нужно знать в каком диапозоне даты. Там такая портянка будет... Сомнитльно, что проверка каждого значения из 2000000 строк с такой портянкой условий будет быстрее...

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 17:54
Nerf
Пользуясь случаем, попиарю PostgreSQL - работа с датами и временем на высочайшем уровне, намного круче чем в MySQL!
+ функциональные индесы

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:09
zelenin
R3D3 писал(а):Пользуясь случаем, попиарю PostgreSQL - работа с датами и временем на высочайшем уровне, намного круче чем в MySQL!
  • Специальный формат timestamp with timezone - забудьте про проблемы таймзон, база сделает все за вас.
  • Точность хранения времени до микросекунд - можно считать даже астрономические данные.
  • Любые кастомные подтипы времени, констрейнты, интервалы времени - один раз задекларировал, дальше база делает все за вас.
  • Широчайший и гибчайший выбор индексов для даты/времени - накладываете индекс по выражению + интервальный индекс, дальше ищете по timestamp полю с молниеносной скоростью и база делает все за вас.
это верно. не знаю зачем нужен mysql, если есть postgres)

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:12
zelenin
Nerf писал(а):
уверен, что да. это будет ОЧЕНЬ долго.
В году ~52 недели, ~104 суббот и воскресений. Чтобы написать ваши условия, то нужно знать в каком диапозоне даты.
это не мои условия, а условия задачи.
Nerf писал(а):Там такая портянка будет...
я начал с того, что там портянка будет.
Nerf писал(а):А я Сомнитльно, что проверка каждого значения из 2000000 строк с такой портянкой условий будет быстрее...
как работает БД и индексы знаем? при in не надо сравнивать каждое значение - работают индексы. при вашем способе (конвертирование каждой строки в datetime) мы точно будем проверять все строки.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:22
samdark
Можно пару слов почему именно в int?
Я тоже всегда так делал, но чота недавно пообщался с командой программеров, которые крупный проект пишут и говорят это плохой тон в int хранить дату.
Потому что меньше преобразований и отсутствует возможность ошибиться с часовыми поясами.

Обожаю, когда кто-то говорит, что что-либо является плохим тоном, но не может объяснить, почему именно.

А как будет выглядеть код если время хранится в int ? Думаю, что сложнее.
WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7) или посчитать интервалы на стороне PHP

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:25
R3D3
Sam Dark писал(а): Обожаю, когда кто-то говорит, что что-либо является плохим тоном, но не может объяснить, почему именно.

А как будет выглядеть код если время хранится в int ? Думаю, что сложнее.
WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7) или посчитать интервалы на стороне PHP

Так тут же уже вроде 100500 недостатков перечислили, и ни одного преимущества. Неужели мало? :cry:

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:27
zelenin
Sam Dark писал(а):Обожаю, когда кто-то говорит, что что-либо является плохим тоном, но не может объяснить, почему именно.
я например с трудом смогу объяснить почему испражняться посередине улицы является плохим тоном. буду мямлить что-то про мораль и детей, но для вас это очевидно смешно.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:29
zelenin
Sam Dark писал(а):Потому что меньше преобразований
чего с чем? откуда у меня возьмется int в проекте, в котором я использую datetime? обожаю такую фактологию.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:30
zelenin
R3D3 писал(а):
Sam Dark писал(а): Обожаю, когда кто-то говорит, что что-либо является плохим тоном, но не может объяснить, почему именно.

А как будет выглядеть код если время хранится в int ? Думаю, что сложнее.
WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7) или посчитать интервалы на стороне PHP

Так тут же уже вроде 100500 недостатков перечислили, и ни одного преимущества. Неужели мало? :cry:
инертность - сильное чувство) посмотрите на автора - он пришел спросить мнения, а в итоге скатился в защиту своей позиции.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 18:36
R3D3
Ничего страшного, похоливарить на форуме это дело незазорное и расслабляющее! Кто хочет увидеть - найдет для себя правду.

По теме:

В случае INT:

Код: Выделить всё

WHERE DAYOFWEEK(FROM_UNIXTIME(created_at)) IN (6,7) 
или

Код: Выделить всё

 посчитать интервалы на стороне PHP
В случае TIMESTAMP:

Код: Выделить всё

WHERE DAYOFWEEK(created_at) IN (6,7)
Внимание, вопрос: в каком случае мы видим меньше преобразований?

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 20:41
Nerf
in (created between (15654654,2656465) or .... or ... or ... or ...)
Это что за покемон? :mrgreen:

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 20:59
zelenin
Nerf писал(а):
in (created between (15654654,2656465) or .... or ... or ... or ...)
Это что за покемон? :mrgreen:
это то, в каком виде придется выбирать субботы и воскресенья, если мы отказываемся от datetime на уровне базы.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 21:33
R3D3
zelenin писал(а):
Nerf писал(а):
in (created between (15654654,2656465) or .... or ... or ... or ...)
Это что за покемон? :mrgreen:
это то, в каком виде придется выбирать субботы и воскресенья, если мы отказываемся от datetime на уровне базы.
Это мы все обсуждаем решение задачи которую я привел для примера когда с int временем работать сложнее чем с timestamp viewtopic.php?f=19&t=36434#p186641

А вот еще задачка позабористее:

Допустим у нас ведется логирование всех логинов пользователя в систему в отдельной таблице. Нужно вывести всех пользователей и все дни за последние два года, в которые эти пользователи логинились в систему более 10 раз. В случае timestamp мы извлекаем день day_no из времени логина пользователя, далее делаем group by user_id, day_no и фильтруем все группы в которых больше 10 записей. Некоторые детали я опустил, но итоговый запрос на 5-6-7 строчек получается. Как это сделать в случае int ? Я сходу даже себе и не представляю.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 22:14
Nerf
zelenin писал(а):
Nerf писал(а):
in (created between (15654654,2656465) or .... or ... or ... or ...)
Это что за покемон? :mrgreen:
это то, в каком виде придется выбирать субботы и воскресенья, если мы отказываемся от datetime на уровне базы.
Я не понял как можно в sql-запросе такое написать, об этом и был вопрос. Прямо такое же не будет работать, псевдокод?

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 22:30
R3D3
Да псевдокод ну и что? Ход мысли то сразу понятен. Вот синтаксически работающая версия если угодно http://sqlfiddle.com/#!9/928e1d/1

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 22:33
Nerf
R3D3 писал(а):Да псевдокод ну и что? Ход мысли то сразу понятен. Вот синтаксически работающая версия если угодно http://sqlfiddle.com/#!9/928e1d/1
Дело в том, что предлагалось через in делать, я и спросил как.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 22:58
zelenin
Nerf писал(а):
zelenin писал(а):
Nerf писал(а): Это что за покемон? :mrgreen:
это то, в каком виде придется выбирать субботы и воскресенья, если мы отказываемся от datetime на уровне базы.
Я не понял как можно в sql-запросе такое написать, об этом и был вопрос. Прямо такое же не будет работать, псевдокод?
псевдокод. читать как перечисление between'ов, каждый из которых один уикенд. итого 52*кол-во лет between'ов, разделенных or.
UPD: ну да, выше все обсудили.

Re: Кто в каком виде хранит дату в мускуле?

Добавлено: 2016.04.20, 23:31
samdark
Под меньше преобразований я имел ввиду случай с часовыми поясами (у меня они в каждом проекте) и тот факт, что timestamp при выборке из базы прилетает в PHP строкой и из PHP улетает тоже строкой.