[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Флуд от темы про Query Builders
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9
McLotos
Кстати в mysql 5.7.16 поля типа TS хранят инфу в формате YYYY-MM-DD HH:II:SS
А еще в них нельзя записывать NULL или 0000-00-00 00:00:00
С datetime теперь тоже дурдом, они теперь тоже не могут быть null и 0000-00-00 00:00:00

_____________
программирование - инструмент для решения конкретных задач, любая попытка спроектировать что-то универсальное приведет к провалу.©paul85
В любом случае тебе прийдётся пройти путь изобретения велосипеда, который прошли другие, только причиной твоего изобретения будет непонимание принципов работы велосипеда изобретённого другими людьми.©SlavaFr
jQuery это попытка использовать АН-225 для перевозки зубочистки
killer8080
Цитата (chee @ 28.12.2016 - 01:29)
эм, ты вообще про что. Про какую конвертацию в БД ты говоришь
Цитата
MySQL converts TIMESTAMP values from the current time zone to UTC for storage, and back from UTC to the current time zone for retrieval. (This does not occur for other types such as DATETIME.) By default, the current time zone for each connection is the server's time. The time zone can be set on a per-connection basis. As long as the time zone setting remains constant, you get back the same value you store. If you store a TIMESTAMP value, and then change the time zone and retrieve the value, the retrieved value is different from the value you stored. This occurs because the same time zone was not used for conversion in both directions. The current time zone is available as the value of the time_zone system variable. For more information, see Section 11.6, “MySQL Server Time Zone Support”.

Цитата (chee @ 28.12.2016 - 01:29)
timestamp должен рассчитываться на уровне приложения и в базу уже писаться рассчитанный в UTC timestamp.

хочешь сказать что не используешь DEFAULT CURRENT_TIMESTAMP | ON UPDATE CURRENT_TIMESTAMP, NOW() и т.п ? Да ты страшный человек biggrin.gif
Цитата (chee @ 28.12.2016 - 01:29)
Я бы не рискнул конвертить время во временные метки средствами СУБД.

это твои личные предрассудки и не более, чему доверять: скриптам, или субд.
фром анекдот
Никому в этом мире нельзя доверять, сказал мужик стирая штаны laugh.gif


Цитата (McLotos @ 28.12.2016 - 06:05)
Кстати в mysql 5.7.16 поля типа TS хранят инфу в формате YYYY-MM-DD HH:II:SS

это не так, хранится она в INT.
chee
Цитата (killer8080 @ 28.12.2016 - 22:20)
DEFAULT CURRENT_TIMESTAMP | ON UPDATE CURRENT_TIMESTAMP, NOW()

неа не использую, зачем?
Цитата (killer8080 @ 28.12.2016 - 22:20)
Да ты страшный человек

Я прагматичный человек. И разделяю где должны быть логика приложения, а где хранение данных.
Цитата (killer8080 @ 28.12.2016 - 22:20)
то твои личные предрассудки и не более, чему доверять: скриптам, или субд.

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

Но тут да, спор не о чём, тут надо собственный горький опыт.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 29.12.2016 - 00:26)
Вопрос не в доверии, а в рациональном использовании инструментов.

что "не рационального" в том чтоб использовать TIMESTAMP? Это наилучший формат хранения абсолютного значения даты и времени.

Цитата (chee @ 29.12.2016 - 00:26)
неа не использую, зачем?

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

Цитата (chee @ 29.12.2016 - 00:26)
Но тут да, спор не о чём, тут надо собственный горький опыт.

Видимо у тебя много горького опыта, поделись smile.gif
Я вот как то его не имею с TIMESTAMP.
chee
killer8080, я ничего против не имею против хранение даты в временной метке, я лишь говорю что она должна быть расчитана на уровне приложения, а не на уровне СУБД.


Цитата (killer8080 @ 5.01.2017 - 23:58)
Видимо у тебя много горького опыта, поделись

Мой опыт весьма специфичен, ты не поймешь biggrin.gif

user posted image

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 6.01.2017 - 00:15)
killer8080, я ничего против не имею против хранение даты в временной метке, я лишь говорю что она должна быть расчитана на уровне приложения, а не на уровне СУБД.


глупость, нет никакой необходимости это делать на уровне приложения. Пользы от это ноль, а грабли | усложнения гарантированы
такой запрос всегда отработает корректно
UPDATE `table` SET `time` = NOW()

такой, чреват "горьким опытом" (с timestamp) user posted image
UPDATE `table` SET `time` = 'date("Y-m-d H:i:s")'
chee
killer8080, серьёзно? а что если временные зоны в твоём приложении и СУБД не совпадают? Что если NOW() на два часа раньше чем у тебя в приложении, а данные ты пишешь в таймзоне приложения?

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 6.01.2017 - 00:44)
killer8080, серьёзно? а что если временные зоны в твоём приложении и СУБД не совпадают?

вот как раз тут второй вариант и даёт "горький опыт" wink.gif
chee
killer8080, эм ты в БД пишешь даты только с сегодняшним числом?


_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 6.01.2017 - 00:44)
Что если NOW() на два часа раньше чем у тебя в приложении, а данные ты пишешь в таймзоне приложения?

время фиксируется не в зонах, а в абсолюте. Ты вообще знаешь что такое timestamp?
Цитата (chee @ 6.01.2017 - 00:47)
killer8080, эм ты в БД пишешь даты только с сегодняшним числом?

нет никаких проблем, если твоё приложение знает в какой tz работает, оно должно об этом сообщить субд, установкой переменной при соединении, так же как ты устанавливаешь кодировку.
Цитата (chee @ 6.01.2017 - 00:47)
killer8080, эм ты в БД пишешь даты только с сегодняшним числом?

об установке произвольной даты уже сказал, синхронизировав субд и приложение проблем нет, если дата результат арифметических действий над текущей, в субд для этого так же имеется свой функционал.
chee
killer8080, а если это не моё приложение? А если сервер с БД находится на другом компьютере и там сбиты временные зоны или время?

Цитата (killer8080 @ 6.01.2017 - 00:54)
время фиксируется не в зонах, а в абсолюте. Ты вообще знаешь что такое timestamp?

божешь ты мой, ты вообще читаешь мои сообщения? Но про таймстемп скажу, как я понимаю таймстемп, это берется дата-время и превращается в количество секунд или миллисекунд относительно какой-то базовой даты. Это не дословное определение, но вроде бы как суть передает.

Если у тебя будет рассинхрон по настройкам даты-время в приложении и СУБД, ты при твоём подходе получишь явные артефакты. При настройке даты-время есть куча способов обосраться, даже в самых очевидных местах.

Помоему, я повторяюсь.

_____________
Люди, имеющие низкий уровень квалификации, делают ошибочные выводы, принимают неудачные решения и при этом неспособны осознавать свои ошибки в силу низкого уровня своей квалификации
killer8080
Цитата (chee @ 6.01.2017 - 01:28)
killer8080, а если это не моё приложение?

А если это не твоё приложение, то в чём вопрос? Что от тебя тогда зависит? blink.gif
Цитата (chee @ 6.01.2017 - 01:28)
А если сервер с БД находится на другом компьютере и там сбиты временные зоны или время?

я думал вопрос с "доверием" мы уже прошли, если часы сбиты, то неизвестно где они идут правильно.
Цитата (chee @ 6.01.2017 - 01:28)
божешь ты мой, ты вообще читаешь мои сообщения?

в том то и дело что читаю smile.gif
Цитата (chee @ 6.01.2017 - 01:28)
Но про таймстемп скажу, как я понимаю таймстемп, это берется дата-время и превращается в количество секунд или миллисекунд относительно какой-то базовой даты. Это не дословное определение, но вроде бы как суть передает.

Не "какой то базовой даты" , а строго определённой - "1970-01-01 00:00:00 UTC". Уж это ты обязан знать. Суть её в том, чтоб отвязаться от календарных разночтений, и упростить расчёт временных интервалов. Главные проблемы тут даже не в различии часовых поясов, а в коллизиях временной шкалы, в странах использующих дебильный DST.
Цитата (chee @ 6.01.2017 - 01:28)
Если у тебя будет рассинхрон по настройкам даты-время в приложении и СУБД, ты при твоём подходе получишь явные артефакты.

Если, если ... а если у тебя с субд работают несколько приложений, на разных хостах и рассинхрон времени между ними? Тогда не будет "артефактов"? На какие часы тогда полагаться? Вопрос риторический, следить за синхронностью системных RTC вопрос администрирования, а не программирования естественно. smile.gif

Я ждал когда ты расскажешь о реальных граблях при установке time_zone в mysql, но так и не дождался unsure.gif а ведь они есть smile.gif
Дело в том что работая с часовыми поясами, правильно использовать именно "временные зоны", а не оффсеты и мускул это умеет из коробки, если бы не одно но. Вместо того чтоб использовать системную timezone.db, она требует экспортировать её в свою базу, делать это нужно вручную утилитой mysql_tzinfo_to_sql и естественно следить за её актуальностью тоже вручную. Без этого в time_zone можно прописывать только оффсет. Вот в этом её главный недостаток. В ситуациях когда ты не можешь контролировать субд, на внутреннюю конвертацию в бд лучше не полагаться, timestamp выводить в виде int и форматировать уже на тороне php. Но это вовсе не означает что нужно отказываться от
Цитата (killer8080 @ 28.12.2016 - 22:20)
DEFAULT CURRENT_TIMESTAMP | ON UPDATE CURRENT_TIMESTAMP, NOW() и т.п ?

просто к делу нужно подходить с умом smile.gif
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.