Жалоба на TIMESTAMP в MySQL 4.1!

yrtimD

Guest
Жалоба на TIMESTAMP в MySQL 4.1!

Это что же такое получается. Жил-был формат данных TIMESTAMP(14), который означал YYYYMMDDHHMMSS и ничего больше. Формат занимал 4 байта, позволял автоматически проставлять дату для обновленной/добавленной строки в таблице. С форматом было удобно работать, потому что с одной стороны - это не число секунд, визуально совершенно нераспознаваемое, с другой - числа без перемешки с ненужными для переменных в скриптах пробелами, двоеточиями и тире.
Но тут вышла версия 4.1, в которой сделали TIMESTAMP(14) идентичным DATETIME.
Повалились все скрипты, которые читали, обрабатывали и создавали данные вида "YYYYMMDDHHMMSS".
Прогресс, однозначно прогресс. >:-E

Теперь для восстановления работы пришлось добавлять в скрипты
$date = preg_replace('/[^0-9]/', '', $date);
а в SQL-запросы +0 к имени поля.

Вопрос. Как вы думаете, для чего нужно было менять "YYYYMMDDHHMMSS" на "YYYY-MM-DD HH:MM:SS"?
Только не надо про мифические SQL-стандарты. В каждой базе данных есть минимум по одному нестандартному запросу. В MySQL осталось заменить LIMIT на TOP, чтобы стало совсем "хорошо".

В общем, все эти проблемы с TIMESTAMP еще раз подтвердили, что дату всё-таки нужно хранить как число секунд в integer.

Что интересно, TIMESTAMP "YYYY-MM-DD HH:MM:SS" продолжает занимать 4 байта, а такое же DATETIME "YYYY-MM-DD HH:MM:SS" - 8 байт.
 

Demiurg

Guest
сам себе яму вырыл. В следующий раз думай прежде чем использовать нерекомендованые методы.
 

yrtimD

Guest
У меня есть лишь цитаты из документации, подтверждающие, в некотором роде, обоснованность использования TIMESTAMP. В то же время, я не обнаружил прямых противопоказаний.

"Столбец TIMESTAMP полезен для записи даты и времени при выполнении операций INSERT или UPDATE, так как при этом автоматически вносятся значения даты и времени самой последней операции, если эти величины не введены программой. Можно также устанавливать текущее значение даты и времени, задавая значение NULL."
"можно надежно сделать дамп и восстановить таблицу с этими типами столбцов!"

А в Google вообще не удалось найти какого-либо сочетания "TIMESTAMP" с "not recommended". TIMESTAMP, как и формат DATETIME, обладает некоторыми уникальными свойствами, например из столбца можно выбрать только месяцы. Или максимальный/минимальный год. С числами такое не выйдет.

Вместе с этим, не могу отрицать, что если приложение использует число секунд для всех своих внутренних операций, то возможно это лучший вариант, так как он исключает дополнительную конвертацию данных. К тому же, у серверов дата бывает разная (не GMT), что делает вредным автоматическое обновление поля. В добавок, использование числа секунд существенно упрощает перенос данных между базами (например MSSQL <-> MySQL), если это необходимо...

Эх, такую засаду устроить разработчикам... Мало им проблем с пятым PHP.
 

Demiurg

Guest
timestamp - это отметка времени некого события в системе. datetime - дата и время не зависящие от системы, например дата рождения. Формат вывода изменили, как мне кажется, наоборот для упрощения. Надеятся даже на формат datetime полей давольно опрометчиво, в mysql есть куча функций приведения к определенному формату. В крайнем случае напиши одну функцию, которая будет всегда приводить к нужному тебе формату и всегда используй её.

>Эх, такую засаду устроить разработчикам... Мало им проблем с пятым PHP.
а какие проблемы у разработчиков mysql с php ?
 

yrtimD

Guest
В крайнем случае напиши одну функцию
Спасибо, но, к счастью, проблемы со скриптами и базой решены.

пока прочитано не будет
Сколько цветных буковок! :lol: "All rights reserved" тоже читать? Ты что хочешь сказать-то, чтобы я использовал MySQL-функции для преобразования даты? Нашел кому ссылку показывать - алло, родной, мне это всё давно известно. Можем встретиться в привате - поцитировать :)
У них там кстати ошибка в скрипте добавления комментариев.

Дело вот в чем: представь, еще в школе тебя учили, что 2+2=4. А тут объявляют, что начиная с сегодняшнего дня 2+2="4". В кавычках, потому что это соответствует html-стандарту экранирования параметров атрибута. %) Причем, 2+2+0=4. Какого будет?

timestamp - это отметка времени некого события в системе.
М... да... всё правильно... так и есть...

а какие проблемы у разработчиков mysql с php?
Ага. Типа ты не знаешь. ;-)
 

Demiurg

Guest
yrtimD
неужели ты думаешь, что стандарты придумывают от балды? Вот тебе вдалбливали в школе, что ускорение прямо пропорционально силе и обратно пропорционально массе, а тут раз и общая теория относительности. Побежали жаловаться учительнице физике? Надо привыкать уже, что все в жизне меняется и проектировать так, что бы подобные изменения бегко давались. И не надо кричать, что ты такой крутой, а mysql тебя на.. обманули.

>Ага. Типа ты не знаешь. ;-)
нет
 

yrtimD

Guest
И не надо кричать, что ты такой крутой
Это к Frol'у.

Знаешь. Я не случайно коснулся темы пятого PHP и MySQL. Потому что изменение формата TIMESTAMP столь же глобально, и касается многих. А решение, между тем, такое же несложное.
 

Demiurg

Guest
>Знаешь. Я не случайно коснулся темы пятого PHP и MySQL. Потому что изменение
>формата TIMESTAMP столь же глобально, и касается многих. А
>решение, между тем, такое же несложное.
ничего не понял.
 

chira

Новичок
yrtimD
всё-то ты знаешь, только с датой работать не научился
TIMESTAMP, как и формат DATETIME, обладает некоторыми уникальными свойствами, например из столбца можно выбрать только месяцы. Или максимальный/минимальный год. С числами такое не выйдет.
как сказал Frol:
дату надо обрабатывать как дату
а ты месяц из TIMESTAMPa вырезаешь строковыми функциями, потом кричишь, что тебя обидели новой версией MySQL ...
 
Сверху