Что ж, я думаю, следующее поможет прояснить ситуацию.
Дата и время могут храниться в поле DATETIME в mysql.
TIMESTAMP используется, если вы хотите отметить время создания строки - поле будет автоматически заполнено при создании.
Использование целого числа для Date немного излишне, поскольку это, по сути, то, что делает DATETIME, но делает за вас все трудоемкие преобразования.
Есть ли конкретное преимущество или недостаток, о котором вы хотите узнать?
Отметка времени в mysql может быть очень сложной. Если не объявить внимательно, вы можете получить поле, которое автоматически изменяет свое значение при каждом обновлении строки (даже если вы не обновляете его явно).
Я бы сохранил данные, используя поля 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
Если вам нужна точность в миллисекундах для метки времени, вам нужно сохранить ее как целое число. Однако будьте осторожны, это может усложнить ситуацию.
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. Я бы, наверное, использовал это на практике
Большое спасибо, например, за автоматическое изменение поля. Это очень важно знать (по крайней мере, для меня).