web-dev-qa-db-fra.com

Comment stocker les timestamps UNIX avec MySQL

Quelques antécédents:

Mon site Web dépend fortement de la coordination des utilisateurs sur différents types de fuseaux horaires.

J'utilise Carbon pour gérer mes conversions de fuseau horaire et mes calculs côté serveur et moment.js sur le client.

En conséquence, la conception a été choisie pour que toutes les dates (par exemple, l'heure de début d'un événement) soient stockées sous forme d'horodatages Unix.

Problème

Je suis un peu confus par la définition d'un "horodatage". Dans PHPMyAdmin, l'horodatage n'est pas un horodatage Unix, mais plutôt un format de date:

2016-10-06 20:50:46

Donc, si vous voulez avoir un champ par défaut de l'horodatage actuel, alors vous obtenez la date actuelle en GMT.

Cela rend les choses plus compliquées à reconvertir en fuseau horaire des utilisateurs par rapport à un entier d'horodatage unix ...

Question:

Quel type de champ devrais-je stocker mes horodatages Unix, j'utilise actuellement int(11) avec la valeur par défaut none. Par extension ... existe-t-il un moyen de stocker le timestamp Unix actuel (par exemple 1475971200) par défaut dans MySQL?

8

Un horodatage Unix est un grand entier (le nombre de secondes depuis le 01/01/1970 à 00:00:00 UTC), donc INT(11) est le type de données correct.

Malheureusement, je ne pense pas qu'il soit possible de spécifier un paramètre par défaut permettant d'insérer l'horodatage actuel. Vous devrez appeler UNIX_TIMESTAMP() explicitement lors de l'insertion et l'utiliser. Les appels de fonction ne sont pas autorisés dans les spécifications DEFAULT.

11
Barmar

En fait, vous devez utiliser bigint ou varchar car le maximum pour int(11) est 2'147'483'647 (plus d'informations ici ). 

Ensuite, comme indiqué dans les réponses précédentes, vous devez insérer manuellement UNIX_TIMESTAMP()

0
Luka Govedič