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

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

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
0
1 790
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

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

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

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

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

Есть ли конкретное преимущество или недостаток, о котором вы хотите узнать?

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

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

Я бы сохранил данные, используя поля 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. Я бы, наверное, использовал это на практике

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

Большое спасибо, например, за автоматическое изменение поля. Это очень важно знать (по крайней мере, для меня).

OZ_ 14.02.2012 19:06

Другие вопросы по теме