Каковы плюсы и минусы различных типов полей даты и времени в MySQL?

Дата и время в MySQL могут храниться как DATETIME, TIMESTAMP и INTEGER (количество секунд с 01.01.1970). Каковы преимущества и недостатки каждого, особенно при разработке в стеке LAMP?

  • TIMESTAMP хранится в проприетарном методе MySQL (хотя в основном это строка, состоящая из года, месяца, дня, часа, минут и секунд), и, кроме того, поле типа TIMESTAMP автоматически обновляется всякий раз, когда запись вставлена ​​или изменена, и нет явного значение поля задано:

    mysql> create table timestamp_test( id integer not null auto_increment primary key, val varchar(100) not null default '', ts timestamp not null); Query OK, 0 rows affected (0.00 sec) mysql> insert into timestamp_test (val) values ('foobar'); Query OK, 1 row affected (0.00 sec) mysql> select * from timestamp_test; +----+--------+----------------+ | id | val | ts | +----+--------+----------------+ | 1 | foobar | 20090122174108 | +----+--------+----------------+ 1 row in set (0.00 sec) mysql> update timestamp_test set val = 'foo bar' where id = 1; Query OK, 1 row affected (0.00 sec) Rows matched: 1 Changed: 1 Warnings: 0 mysql> select * from timestamp_test; +----+---------+----------------+ | id | val | ts | +----+---------+----------------+ | 1 | foo bar | 20090122174123 | +----+---------+----------------+ 1 row in set (0.00 sec) mysql> 
  • DATETIME – это стандартный тип данных для дат и времени, который работает в сочетании с функциями даты и времени в MySQL. Я бы, наверное, использовал это на практике

  • Хранение дат в формате INTEGER не рекомендуется, так как вы открываете реальную банку червей из-за интересных проблем, таких как часовые пояса, високосные годы и т. П. – по крайней мере, если вы собираетесь запросить базу данных на основе конкретных дат, хранящихся в этом поле.

Я бы сохранил данные, используя поля DATETIME или DATE в MySQL. По крайней мере, если вы собираетесь хранить значения даты до 2038 года: http://en.wikipedia.org/wiki/Year_2038_problem . Если вы находитесь в системе, которая хранит целые числа по-разному, у вас может не возникнуть проблема.

По-прежнему легко сравнивать значения даты или даже метки времени.

 SELECT * FROM myTable WHERE startDate > '2009-01-01' SELECT * FROM myTable WHERE UNIX_TIMESTAMP(startDate) > 1232541482 

Ну, я думаю, следующее поможет прояснить.

Дата и время можно сохранить в поле DATETIME в mysql.

TIMESTAMP используется, если вы хотите создать отметку времени при создании строки – поле будет автоматически заполнено при создании.

Использование целого числа для даты немного переборщило, потому что это по существу то, что делает DATETIME, но делает все необходимые для вас преобразования времени.

Есть ли какая-то особая выгода или недостаток, о котором вы хотите узнать?

Временная метка в mysql может быть очень сложной. Если вы не указали это, вы можете получить поле, автоматически изменяющее его значение при каждом обновлении строки (даже если вы не обновите его явно).

http://dev.mysql.com/doc/refman/5.0/en/timestamp.html

Если вам нужна верность миллисекунды для отметки времени, вам нужно сохранить ее как целое. Будьте осторожны, хотя это может усложнить ситуацию.