Обсудим способы хранения времени в MySql Kovalsky 12 Июл 2011, 19:41 Хотелось бы обсудить плюсы и минусы разных вариантов хранения времени в таблицах. Сам когда то использовал int (давно дело было) Сейчас мой выбор datetime, но готов рассмотреть иные варианты... Может кто что получше предложит? В общем какой ваш выбор, и желательно аргументировать почему. --------------- Сизый 12 Июл 2011, 19:44 TIMESTAMP - формате а потом уже преобразовывать в нормальную дату,время если это нужно --------------- Kovalsky 12 Июл 2011, 19:47 Сизый, а поподробней? то есть поле в базе timestamp и преобразуете при выводе из базы средствами mysql? или преобразования уже в пхп? --------------- Сизый 12 Июл 2011, 19:50 потом уже при выходе преобразовываем с помощью PHP и MySQL функций --------------- Kovalsky 12 Июл 2011, 19:58 Сизый, ну как бы я храню примерно так же только в поле datetime ... немного смущает что при выводе приходится конвертировать назад в int чтобы обработать разными функциями для придания человеческого вида датам... как бы логика казалось бы подсказывает хранить в int раз уж все равно использую int потом... --------------- Сизый 12 Июл 2011, 20:05 DATETIME - самое простое.. хранение с точностью до секунды. VARCHAR - доли секунды.. но как по мне.. изВраЩениее_0 --------------- noTformaT 13 Июл 2011, 8:57 datetime. по мне так удобно и просто --------------- oee 13 Июл 2011, 11:21 int лучше всего. Легко преобразовать в человеческий вид и также легко производить математические действия --------------- Default_mo 13 Июл 2011, 11:26 oee, int это не тип ячейки для времени, это тип ячейки для целого числа, не дробного (2.2 например). Не надо говорить о нем так, что это специальный тип для времени :) --------------- SigmA 13 Июл 2011, 11:55 Лучше и быстрее манипулировать датами средствами и типами mysql, она же предоставляет их не для того чтобы мы говорили что нам лень провести пару преобразований в пхп. А int пригодится для хранения некоторого количества секунд, например общее время на сайте. --------------- Pirate 13 Июл 2011, 14:51 UNIX_TIMESTAMP() лишние вычисления для MySQL, поэтому лучше в начале скрипта сделать define('TIME', time()); и потом просто подставлять в запрос константу. --------------- oee 13 Июл 2011, 14:57 Default_mo, ну не для времени. А что мешает нам использовать ее для времени? Мне допустим удобнее так, а на сайтах не видно кто какие типы данных в ячейках использует... добавлено спустя 4 минуты: Не думаю, что преобразование времени сильно влияет на скорость работы скрипта. Это мелочь:) --------------- Pirate 13 Июл 2011, 21:23 oee, а так по чуть-чуть, да по чуть-чуть =). --------------- manyrus 13 Июл 2011, 22:00 Лол, даты можно преобразовывать и в sql-запросе. А если не суждено(руки кривы, с кем не бывает), то через функцию date можно всё легко преобразовать (но это очень тупой вариант) добавлено спустя 2 минуты: Pirate, лол, лишние. Нафиг тогда её создавали?) А потом программист будет думать, что за константа. --------------- Pirate 13 Июл 2011, 22:26 manyrus, действительно что же это за константа такая *facepalm*. --------------- Гость 13 Июл 2011, 23:54 я храню в int, по-мне удобно --------------- FENIKS 14 Июл 2011, 0:06 если есть специальные для времени ячейки то смысл делать к примеру в int?канечно некоторые хотят показать что умнее всех но это уж их дело) --------------- Replikon 14 Июл 2011, 8:08 TIMESTAMP в INT добавлено спустя 6 минут: И на мой взгляд вы неправильно задаете вопрос. Надо спрашивать не "Почему бы не пользоваться встроенными типами MySQL? Ведь зачем их тогда создавали?", а "Ну и зачем их создавали, если ими просто неудобно пользоваться?" Имхо. --------------- wovo4ka 14 Июл 2011, 10:21 использую INT и в нём 12-значное определение времени возвращаемое через time(); ИМХО это самый удобный вариант для хранения и оперирования временем... --------------- manyrus 14 Июл 2011, 15:52 wovo4ka, mysql спокойно форматирует даты, как вы понять не можете ><. --------------- Kovalsky 14 Июл 2011, 16:10 manyrus, я вот например понимаю что mysql может форматировать прямо в запросе дату.. и из поля datetime где записано время 2011-07-05 01:46:57 его можно вывести в более удобном виде например 01:46 05-07-11 но это как бы не те преобразования которые нужны.. если хочешь дату удобочитаемую типа: 27 июня или например: вчера придется все равно обрабатывать дату уже в пхп. вот как бы и получается двойное преобразование... из базы выдергивается время преобразованое: UNIX_TIMESTAMP(`time`) AS `time_create` и потом обрабатывается пхп функциями.. с одной стороны двойная работа.. с другой стороны если поле datetime то проще провести выборку по конкретной дате.. например все новости за 23 мая можно вывести не высчитывая в скрипте timestamp полуночи того дня... вот потому и создана эта тема... может все таки тупо писать сразу в int? --------------- wovo4ka 14 Июл 2011, 17:00 manyrus, ну и что, что форматирует? мне ТАК удобно, я оперирую датой в таком виде...при том и скрипты не нужно усложнять (согласен с Kovalsky) всякими переводами одного типа отображения в другое... тут уже каждый сам себе выбирает формат сохранения даты... потому я и написал "ИМХО" --------------- Akdmeh 14 Июл 2011, 18:48 Делаю через unsigned int, но более правильно - timestamp=) --------------- Kovalsky 14 Июл 2011, 18:52 Akdmeh, а каким же боком timestamp правильней? смотря для каких задач мне кажется... он же обновляется при каждом update строки насколько я понимаю. --------------- Akdmeh 14 Июл 2011, 19:03 24, нет, это если специально указать ON UPDATE CURRENT_TIMESTAMP или как там. --------------- Andris 24 Июл 2011, 19:46 Я храню в int, все устраивает :) --------------- Palpatine 24 Июл 2011, 20:01 TIMESTAMP --------------- Danis92 26 Июл 2011, 19:03 Храню в int ,так удобнее --------------- EmptyZero 21 Янв 2013, 17:15 Использую int для хранения даты и буду его использовать Но в дальнейшем буду пользоваться TIMESTAMP ;/ Поверьте, с помощью TIMESTAMP вы избежите от реализации многих велосипедов:) --------------- san 21 Янв 2013, 18:37 Когда-нибудь до php дойдет прогресс и у него появятся нормальные объекты Time. И закончатся мучения похапистов с unix timestamp, integer в mysql и кучей лишних манипуляций) А пока для них особо никаких плюсов в юзании datetime/timestamp нет. Конечно если у вас mysql не занимается статистическими запросами и сильно завязана на работе с временем, но таких задач очень мало) --------------- Виктор 21 Янв 2013, 18:52 после 2038 года тем, кто использует формат поля int для хранения даты из функции time() крышка --------------- EmptyZero 03 Фев 2013, 17:37 Виктор, к тому времени мы, скорее всего забудем что такое 'mysql' и 'php' =)) --------------- TOOZ 03 Фев 2013, 17:40 int :hello: --------------- iBiZoNiX 21 Фев 2013, 12:13 Я вот как раз сейчас озадачен этим вопросом. До этого использовал int, после прочтения топика пожалуй продолжу его использовать. --------------- Ales 21 Фев 2013, 12:21 int создан для чиел, для дат есть другие варианты. хотя пользуйтесь int, чтобы ваш уровень всегда могли отличить с первого взгляда :) --------------- Fernus 21 Фев 2013, 13:31 timestamp Самый верный метод... добавлено спустя 2 минуты: Поверьте, с помощью TIMESTAMP вы избежите от реализации многих велосипедов:) Пока это сами не поймут, так и будут int, int, int... :D Я уже как несколько лет последних всегда использую timestamp... --------------- iBiZoNiX 22 Фев 2013, 0:49 Fernus, А в чем его преимущество? Я вот, например, все же решил использовать DATETIME поскольку он мне показался наиболее подходящим. --------------- FeST 22 Фев 2013, 0:56 использую инт --------------- iBiZoNiX 22 Фев 2013, 1:57 Я тут немного почитал об этом и сделал некоторые выводы. int - следует использовать в случае возможности переноса БД на другую СУБД, для сохранения совместимости. Поскольку в других СУБД может не оказаться типа DATATIME или TIMESTAMP. TIMESTAMP хорош следующим: Основное удобство использования типа TIMESTAMP состоит в том, что для столбцов этого типа в таблицах можно задавать значение по умолчанию в виде подстановки текущего времени, а так же установки текущего времени при обновлении записи. (с)Хабр Вот только у этого типа есть один незначительный минус — диапазон значений: 1970-01-01 00:00:00 — 2038-12-31 00:00:00 В общем, лично для себя я сделал выбор в пользу DATETIME, хотя, скорей всего, параллельно к нему буду использовать TIMESTAMP --------------- FeST 22 Фев 2013, 2:03 я думаю к тому времени как наступит 2038 год уже выйдет пхп 20 и мускул стописят(или вообще другой драйвер) и там уже вообще ни инт ни datatime не будет . исходя из этого да и вообще врядли мой скрипт проживет столько времени;/ я его успею 100 раз переписать или новый написать или забью на все это дело;/ вот если бы сказали что через пару лет инт с датой сломаются − я б уже начал шевелиться. а так... --------------- iBiZoNiX 22 Фев 2013, 2:17 FeST, Согласен. Это все-таки не год и не два. Так что об этом пока можно не думать. --------------- Okula 22 Фев 2013, 5:32 использую поле TIMESTAMP в базе данных. Время записываю в через CURRENT_TIMESTAMP() --------------- mixlion 22 Фев 2013, 6:22 datetime + ф-ия mysql DATE_FORMAT при выборке --------------- Felis 22 Фев 2013, 13:03 пхп 20 Умоляю. Это говно либо вообще отомрет, либо не поднимется выше 10-й :D --------------- FeST 22 Фев 2013, 13:12 Felis, это было образно сказанно ---------------