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 байт.
Это что же такое получается. Жил-был формат данных 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 байт.