58 votes

Quel est le type de données pour unix_timestamp (MySQL) ?

Quel type de données dois-je utiliser pour sauvegarder unix_timestamp (MySQL) ?

4 votes

0 votes

L'horodatage est-il identique à l'horodatage unix ?

0 votes

@user239431 : UNIX_TIMESTAMP est une fonction MySQL : dev.mysql.com/doc/refman/5.1/en/

70voto

Haim Evgi Points 40786

Le type est un nombre entier comme :

int(11) 

est bon pour l'indexation et les conditions comme > < =

27 votes

Si vous utilisez INT, vous devez vous rappeler que la version signée ne va que de -2147483648 à 2147483647. année 2038 bug . Vous pouvez utiliser INT(11) UNSIGNED ou BIGINT. quelques mises en garde avec ce dernier, mais c'est massif . Personnellement, je me sens plus en sécurité avec les fonctions intégrées de MySQL, mais les fonctions d'indexation et de comparaison pour les grands ensembles de données peuvent vous influencer.

0 votes

Pour la postérité, j'ai ajouté le commentaire de William Turrell. UNSIGNED INT serait la voie à suivre de mon point de vue, mais la réponse la plus juste dépend du langage dans lequel vous extrayez les informations de la base de données (si vous codez à partir de zéro). Exemple : si vous travaillez en Java, UNSIGNED INT correspond à java.lang.Long (voir la table 5.2 ici pour les utilisateurs de MySQL + Java) : dev.mysql.com/doc/connector-j/fr/ ). De cette façon, vous économisez de l'espace dans la base de données tout en vous assurant que vous n'écrivez pas de code qui rencontrera un bogue en 2038. Excellent point @WilliamTurrell.

1 votes

En ce qui concerne le bogue de 2038, le fait d'augmenter la valeur de 11 en int(11) à 12 ou 13 serait une mesure raisonnable pour éviter cette situation ?

18voto

OMG Ponies Points 144785

Vous voulez utiliser le Type de données TIMESTAMP .
Elle est stockée comme une valeur d'époque, mais MySQL affiche la valeur sous la forme 'YYYY-MM-DD HH:MM:SS'.

3 votes

Je pense que la question est de savoir quel type de données MySQL est le plus approprié pour stocker des valeurs d'époque. TIMESTAMP ne serait pas la réponse ici, car les seules valeurs acceptables pour TIMESTAMP sont les chaînes de caractères mois/jour/année. Source : dev.mysql.com/doc/refman/8.0/fr/date-and-time-literals.html

5voto

Ahmad Zahabi Points 98

MySql DateTime Ce type de données stocke la date au format 'AAAA-MM-JJ HH:MM:SS' dans une plage allant de '1000-01-01 00:00:00' à '9999-12-31 23:59:59'.

MySql TIMESTAMP Le type de données stocke la date au format 'AAAA-MM-JJ HH:MM:SS' dans une plage allant de '1970-01-01 00:00:01' UTC à '2038-01-19 03:14:07' UTC.

TIMESTAMP Unix est le nombre de secondes écoulées depuis 1970-01-01 si vous voulez stocker l'horodatage unix dans le fichier mysql db vous devez utiliser int(11) avec attribut UNSIGNED (pour n'autoriser que les nombres positifs), et si vous voulez sauvegarder le nombre de microsecondes, vous devez utiliser bigint(20) ,..

Si vous voulez obtenir le unixtimestamp dans un format lisible dans votre requête de sélection Vous pouvez utiliser

SELECT FROM_UNIXTIME(CAST(yourtable.start_time as UNSIGNED)) as date_time

Si vous utilisez php que vous pouvez utiliser :

$unixtimestamp= time();//1544619186

echo(date("Y-m-d", $unixtimestamp));//2018-12-12

Si vous voulez afficher la date et l'heure à l'aide de la fonction le fuseau horaire local sur Javascript utiliser cette fonction

  function timeConverter(UNIX_timestamp){
        var date = new Date(UNIX_timestamp*1000);
        var year = date.getFullYear();
        var month = ("0"+(date.getMonth()+1)).substr(-2);
        var day = ("0"+date.getDate()).substr(-2);
        var hour = ("0"+date.getHours()).substr(-2);
        var minutes = ("0"+date.getMinutes()).substr(-2);
        var seconds = ("0"+date.getSeconds()).substr(-2);

        return year+"-"+month+"-"+day+" "+hour+":"+minutes+":"+seconds;
    }
   console.log(timeConverter(value));// 2018-14-12 13:11:33

(Dans ce cas, le serveur doit retourner l'unixTimestamp tel quel : SELECT yourtable.start_time as date_time )

0voto

BIGINT UNSIGNED NOT NULL

La représentation de l'époque en secondes peut s'inscrire dans INT(11) Si l'horodatage comporte des millisecondes, INT(20) peut être utilisé.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X