web-dev-qa-db-fra.com

Quelle différence entre les types DATE, TIME, DATETIME et TIMESTAMP

J'ai besoin de stocker les deux heure et date dans le mysql. J'ai donc utilisé la fonction NOW() pour cela. Mais je ne sais pas ce que je devrais utiliser pour le type de colonne im phpmyadmin. Il est à noter que NOW() renvoie à la fois l'heure et la date comme ceci:

2014-11-11 12:45:34

Voici une solution, je peux utiliser un séparateur pour séparer la date et l'heure (2014-11-11 Et 12:45:34), Puis les stocker individuellement dans les types DATE et TIME. Ou je peux utiliser le type VARCHAR pour stocker les deux dans une colonne. Mais je pense que ces moyens ne sont pas standard. Quel est le type standard pour stocker la date et l'heure?

Voici ma requête: (aussi je ne sais pas pourquoi NOW() fonction ne fonctionne pas)

INSERT INTO table (timedate) VALUES (NOW())
22
Shafizadeh

DATE: Il est utilisé pour les valeurs avec une partie date, mais aucune partie heure. MySQL récupère et affiche les valeurs DATE au format YYYY-MM-DD . La plage prise en charge est 1000-01-01 à 9999-12-31.

DATETIME: Il est utilisé pour les valeurs contenant à la fois des parties de date et d’heure. MySQL récupère et affiche les valeurs DATETIME au format AAAA-MM-JJ HH: MM: SS . La plage prise en charge est 1000-01-01 00:00:00 à 9999-12-31 23:59:59.

TIMESTAMP: Il est utilisé pour les valeurs contenant à la fois des parties de date et d’heure. TIMESTAMP a une plage de 1970-01-01 00:00:01 UTC à 2038-01-19 03:14:07 UTC.

TIME: Ses valeurs sont en HH: MM: SS format (ou HHH: MM: SS format pour les valeurs de grandes heures). Les valeurs TIME peuvent aller de -838:59:59 à 838:59:59. La partie heures peut être si grande parce que le type TIME peut être utilisé non seulement pour représenter une heure de la journée (qui doit être inférieure à 24 heures), mais également un temps écoulé ou un intervalle de temps entre deux événements (qui peut être beaucoup plus grand 24 heures, ou même négatif).

60
Saty

J'ai une perspective légèrement différente sur la différence entre un DATE-HEURE et un HORODATAGE . A DATETIME stocke la valeur littérale d'une date et d'une heure sans référence à un fuseau horaire particulier. Ainsi, je peux définir une colonne DATETIME sur une valeur telle que '2019-01-16 12:15:00' pour indiquer avec précision le moment de mon dernier anniversaire. . Était-ce l'heure normale de l'Est? Heure Standard du Pacifique? Qui sait? Lorsque le fuseau horaire actuel du serveur entre en jeu se produit lorsque vous définissez une colonne DATETIME sur une valeur telle que NOW () . La valeur stockée sera la date et l'heure actuelles en utilisant le fuseau horaire actuel en vigueur. Mais une fois qu'une colonne DATETIME a été définie, elle sera affichée de la même manière, quel que soit le fuseau horaire actuel.

Une HORODATAGE la colonne, d'autre part, prend la valeur '2019-01-16 12:15:00' que vous y avez définie et l'interprète dans le courant fuseau horaire pour calculer une représentation interne relative au 1/1/1970 00:00:00 UTC. Lorsque la colonne est affichée, elle est reconvertie pour l’affichage en fonction du fuseau horaire actuel. C’est une fiction utile de penser à HORODATAGE comme prenant la valeur que vous définissez et la convertissant du fuseau horaire actuel en UTC pour le stocker puis le reconvertir au fuseau horaire actuel pour l'affichage.

Si mon serveur est à San Francisco mais que j'organise un événement à New York qui commence le 01/09/1029 à 20h00, j'utiliserais un HORODATAGE = colonne pour conserver l'heure de début, définissez le fuseau horaire sur 'Amérique/New York' et définissez l'heure de début sur '2009-09-01 20:00:00'. Si je veux savoir si l'événement s'est produit ou non, quel que soit le paramètre de fuseau horaire actuel, je peux comparer l'heure de début à NOW (). Bien sûr, pour afficher de manière significative un client potentiel, je aurais besoin de définir le bon fuseau horaire. Si je n'avais pas besoin de faire des comparaisons de temps, je ferais probablement mieux d'utiliser une colonne DATETIME , qui s'affichera correctement (avec un temps EST implicite zone) quel que soit le fuseau horaire actuel du serveur.

7
Ronald Aaronson

Saty décrit les différences entre eux. Pour votre pratique, vous pouvez utiliser datetime afin de conserver le résultat de NOW().

Par exemple:

CREATE TABLE Orders
(
  OrderId int NOT NULL,
  ProductName varchar(50) NOT NULL,
  OrderDate datetime NOT NULL DEFAULT NOW(),
  PRIMARY KEY (OrderId)
)

Vous pouvez en lire plus à w3schools .

4
Hossein Mobasher