Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: PHP time() vs MySQL UNIX_TIMESTAMP(NOW())
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
Я не знаю почему, но я всегда сохраняю дату в БД в unix-формате (может это покажется странным - никогда не храню в DATETIME , DATE или TIMESTAMP). И вот чет мне захотелось устроить fight между php и mysql, а именно проверить скорость обновления в БД таблицы с полем int(10) UNSIGNED. Тест проводился в цикле for в 1000 итераций по 5 раз.
----- То что программа работает, не означает что она написана правильно!
OrmaJever
Отправлено: 25 Октября, 2012 - 18:45:54
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
А смысл? Поля DATETIME , DATE или TIMESTAMP дают кучу возможностей по форматированию и сравниванию даты, а что может простая метка в int поле?
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
KingStar
Отправлено: 25 Октября, 2012 - 18:52:03
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
OrmaJever честно - не могу ответить на твой вопрос, вот не нравится мне чем-то, и все тут
нивкоем случае я не говорю что они плохи, просто мне так больше нравится, привык, приучили
----- То что программа работает, не означает что она написана правильно!
Мелкий
Отправлено: 25 Октября, 2012 - 18:53:06
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
А можно ещё раз, но без бесполезной здесь функции UNIX_TIMESTAMP, только отнимающей время?
----- PostgreSQL DBA
Okula
Отправлено: 25 Октября, 2012 - 18:54:12
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
Давно перестал хранить метку времени как дату чего-либо. MySQL даёт богатый и гибкий функционал для работы с датой.
Храню дату в формате TIMESTAMP, запись произвожу через CURRENT_TIMESTAMP()
KingStar
Отправлено: 25 Октября, 2012 - 18:57:26
Участник
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
Мелкий пишет:
А можно ещё раз, но без бесполезной здесь функции UNIX_TIMESTAMP, только отнимающей время?
впервые слышу, что NOW возвращает метку (Добавление)
Цитата:
в БД таблицы с полем int(10)
----- То что программа работает, не означает что она написана правильно!
EuGen
Отправлено: 25 Октября, 2012 - 19:02:46
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
В Mysql 5 и выше при хранении даты в TIMESTAMP, она автоматически конвертируется из текущей временной зоны в UTC, а так же конвертируется обратно при получении.
Этим может объясняться то, что запросы с использованием TIMESTAMP будут выполняться медленнее, чем с DATETIME.
Пример бенчмарка:
Кроме этого, существует ограничение в TIMESTAMP, связанное с предельным 32-битным целочисленным значением (известный "кризис 2038-го"), для DATETIME же такое значение будет равно 9999-12-31, что трудно достижимо.
TIMESTAMP при этом имеет полезную возможность в виде обновления (ON UPDATE CURRENT_TIMESTAMP и DEFAULT CURRENT_TIMESTAMP), что может быть важным при определенной бизнес-логике.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
Okula
Отправлено: 25 Октября, 2012 - 19:14:48
Участник
Покинул форум
Сообщений всего: 1389
Дата рег-ции: Окт. 2010
Помог: 42 раз(а)
EuGen, думаю со временем "кризис 2038" года будет решён, до этого времени БД MySQL переживёт ещё не одну версию, а может быть что то более универсальное придумают.
caballero
Отправлено: 25 Октября, 2012 - 19:18:42
Активный участник
Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011 Откуда: Харьков
Помог: 126 раз(а)
предпочитаю datetime
во первых напрягает когда БД чего то там конвертит без моего ведлма
во вторых timestamp не дает хранить NULL а иногда это нужно по бизнес логике
Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011 Откуда: Беларусь
Помог: 69 раз(а)
Okula пишет:
EuGen, думаю со временем "кризис 2038" года будет решён, до этого времени БД MySQL переживёт ещё не одну версию, а может быть что то более универсальное придумают.
до этого времени уже все пеерсядем за 64-x битные
----- То что программа работает, не означает что она написана правильно!
Мелкий
Отправлено: 25 Октября, 2012 - 19:41:09
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
KingStar пишет:
впервые слышу, что NOW возвращает метку
Верно, NOW() - возвращает Y-m-d H:i:s
Вот только TIMESTAMP такую запись сам жуёт.
----- PostgreSQL DBA
EuGen
Отправлено: 25 Октября, 2012 - 19:54:31
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Мелкий пишет:
Вот только TIMESTAMP такую запись сам жуёт.
Порождая, кстати, конвертацию при сравнении (еще один пункт в потерю быстродействия, если уж быть придирчивым)
Okula пишет:
а может быть что то более универсальное придумают
Придумают, разумеется. Скорее всего, введут более высокую разрядность. Я лишь описал текущий тип данных.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
dubasua
Отправлено: 25 Октября, 2012 - 20:07:01
Посетитель
Покинул форум
Сообщений всего: 454
Дата рег-ции: Апр. 2012
Помог: 7 раз(а)
Лично я всегда создаю поле int(10). А потом конвертиш как нужно под разные нужды. И знаний особо никаких не нужно. И зачем держать в голове кучу функция lдля работы с датой, которые легко решаются простыми арифметическими действиями.
OrmaJever пишет:
А смысл? Поля DATETIME , DATE или TIMESTAMP дают кучу возможностей по форматированию и сравниванию даты, а что может простая метка в int поле?
Лично мне на моей практике ни разу не выпадало такое, что нельзя было бы решить обычным INT(10). Ну мне наоборот так проще, допустим я не знаю как вычислить количество дней между двумя датами в формате DATE, а в INT(10) все просто, от большего отнял меньшее, перевел разницу секунд в дни и все. И так решается большинство задач. Короче я считаю его "Дедовским" и безотказным методом, я ставлю плюс на сторону INT(10)
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.