Кто сможет объяснить мистическое поведение phpMyAdmin?
Всем привет. Сам я занимаюсь серверным программированием недавно. Понадобилось сохранять временную метку во время записи отзыва в базу. Почитал маны, создал столбец date_review c типом TIMESTAMP, добавил запись через phpMyAdmin, передав в таймштамп функцию NOW(). В ячейке появилось что-то типа "2019-05-20 10:00:00".
Позже понял, что это не совсем то, что мне нужно, ибо на сервере я форматирую дату функцией date() из php. Немного погуглив, нашел пост, в котором говорилось, что всем известную метку в секундах с 01.01.1970 года дает функция UNIX_TIMESTAMP.
Я попытался сделать запись, передав в таймштапм эту функцию, но в записалось не количество секунд, а "0000-00-00 00:00:00". То есть, как будто функция NOW() отработала неправильно.
Также phpMyAdmin выкинул ошибку Warning: #1265 Data truncated for column 'date_review' at row 1. В чем трабл?
поле с типом timestamp хранит метку времени, 4 байта. всегда в utc, таймзона корректируется автоматом при сохранении/чтении.
Для добавления записи используйте NOW() для сохранения метки текущего момента времени. При чтении, если вам нужно получить unix time, приводите читаему метку к нужному виду:
SELECT UNIX_TIMESTAMP(date_review) AS ts_date_review FROM …
в результатах будет поле ts_date_review с unix time
medbrat69, работает, просто 1. не ООП подход, 2. с наличием DateTime рано или поздно станет deprecated а потом и совсем исключат из сборки. В общем - Bad Practice)
Сергей delphinpro, вообще-то все нормальные компании используют epochtime, в идеале с microtime. Это обусловлено тем что:
- индекс легче
- индекс быстрее
- нет проблем с часовыми зонами