| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Хранение даты и времени в mysql |
| Автор: MystDeim 21.10.2008, 10:15 |
| Никак не могу выбрать как лучше хранить в TIMESTAMP или INT Посоветуйте, пожалуйста, кто что использует в реальных проектах. |
| Автор: Kesh 21.10.2008, 10:30 |
| MystDeim, timestamp |
| Автор: SamDark 21.10.2008, 12:15 |
| Храню в int, приведённый к GMT +0; |
| Автор: SelenIT 21.10.2008, 13:31 |
| Неправильная постановка вопроса. Надо спрашивать не "кто что использует", а "что лучше использовать для такой-то задачи, при таких-то ожидаемых условиях". У каждого способа свои плюсы, минусы и ограничения - например, для записи дат рождения юзеров вообще лучше брать DATETIME, чтоб наверняка не знать проблем с датами до 1970 г. (да и после 2038 - кто знает, сколько проживет эта база?). А если, к примеру, это статистика использования чего-либо, и нужно определить самые активные часы летом - вообще есть смысл разнести дату и время по отдельным полям (DATE и TIME соотв-но), да повесить на каждое отдельный индекс (иначе при сложной выборке база вполне может сказать "шпок";)... TIMESTAMP наиболее удобен там, для чего предназначен - для "автомаркировки" времени добавления записи в таблицу (только при апдейтах с ним нужно быть осторожным!). INT есть смысл применять в переносимых решениях - чтобы все настройки, связанные со временем, можно было менять через PHP, а не через базу. Места в памяти они занимают одинаково, диапазон допустимых значений тоже один и тот же (до января 2038 года), легко конвертируются друг в друга (TO/FROM_UNIXTIME), но при выводе "как есть" значения таймстемпа более человекочитаемы (что немаловажно при отладке). |
| Автор: MystDeim 21.10.2008, 14:42 | ||||
Для дней рождения я выбрал тип DATE,
Время рождения важно знать только в роддоме
Разносить не хочу, так как не хочу проблем с часовыми поясами. Создал таблицу в ней 2 поля TIMESTAMP и DATETIME, странно но отображаются они одинаково: CCYY-MM-DD hh:mm:ss, хотя в мануале написано, что TIMESTAMP(14) записывается как YYYYMMDDHHMMSS. странно... |
| Автор: bars80080 21.10.2008, 14:50 |
| а как выводятся? |
| Автор: MystDeim 21.10.2008, 15:40 | ||
2008-10-21 16:39:25 |
| Автор: bars80080 21.10.2008, 16:19 |
| формат поля TIMESTAMP(14) попробуй задать |
| Автор: MystDeim 21.10.2008, 16:48 | ||
| bars80080, пробовал, глюк какой-то переставить похоже надо. Стал склоняться к использованию INT
дожно быть удобно Уже не вижу преимуществ использования TIMESTAMP, у него такие же ограничения как и при хранении в виде целого числа, при хранении в инт будет проще обрабатывать. |
| Автор: SelenIT 21.10.2008, 17:18 |
Логично;). Я ступил малость. Откуда? Сервер-то один, так какая... пардон, разница? От какой версии мануал? Если не путаю, так было по 4-ю включительно, начиная с пятой стало выводиться с разделителями. А вообще - какая разница, как оно отображается? Все равно для юзеров оно наверняка будет форматироваться как надо через DATE_FORMAT, а чтобы не перепутать сегодняшнюю запись с прошлонедельной при отладке - и по-старому, и по-новому читабельность достаточна... Смотря где и как. Если в самой базе - потребуется одно дополнительное преобразование... В целом, оно с какой-то стороны действительно надежнее - никогда не взбрыкнет, если забыть нужный параметр при апдейте установить... все в своих руках, под контролем... но и думать обо всем, начиная от банального форматирования при выводе и заканчивая вышеупомянутыми часовыми поясами, летним/зимним временем и т.п. тоже придется самому ;). |
| Автор: MystDeim 21.10.2008, 17:35 |
| Спасибо всем за ответы, пришел к выводу, что нужно использовать TIMESTAMP! |