Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/11/2006, 20h30   #1
Invité de passage
 
Inscription : novembre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3
Points : 1
Points : 1
Par défaut Date timestamp année 2038 (?)

J'aimerais comprendre comment enregistrer les dates de créations dans la base mySPL (gérée par phpMyAdmin).

Mon problème*: pour le 09/11/2006, MySql enregistre 20061109181511, et ensuite, la fonction date() retourne 19/01/2038.

Quand je fais mktime(), j'obtiens 1163099946 pour le 09/11/2006...

Alors c'est quoi le bon timestamp*? C'est 20061109181511 ou 1163099946*? Et pourquoi est-ce que MySQL enregistre un timestqmp qui donne ensuite une date différente*???

Précisions*: ça fait 3 heures que je consulte pour résoudre ce pépin...
jeremiegimenez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/11/2006, 07h18   #2
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par jeremiegimenez
Mon problème*: pour le 09/11/2006, MySql enregistre 20061109181511, et ensuite, la fonction date() retourne 19/01/2038.

Quand je fais mktime(), j'obtiens 1163099946 pour le 09/11/2006...
Les timestamps de MySQL ne sont rien d'autre que des horodatages. 20061109181511 veut dire tout simplement 2006/11/09 18:15:11.

mktime() n'est pas du MySQL mais du PHP, et il utilise les timestamps Unix, càd le nombre de secondes écoulées depuis le 1er janvier 1970 à 0h (ce qu'on appelle le début de l' "époque Unix"). Si tu demandes à MySQL de t'afficher cela :
Code :
1
2
 
SELECT unix_timestamp(20061109181511) ;
Il te donnera le timestamp Unix correspondant, à savoir 1163092511.
De même, demande-lui :
Code :
1
2
 
SELECT from_unixtime(1163099946) ;
Tu obtiendras 2006-11-09 20:19:06, ce qui me laisse penser que tu as effectivement mis un bon moment à t'arracher les cheveux entre les deux tests

Quant au 19/01/2038, c'est tout simplement la fin de l' "époque Unix", ce qui veut juste dire que 20061109181511 est trop gros pour être interprété comme un timestamp Unix.

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2006, 12h17   #3
Invité de passage
 
Inscription : novembre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3
Points : 1
Points : 1
Par défaut Merci pour l'explication sur TIMESTAMP

Merci Antoun,

Entre temps, je suis passé à SQL 5, ce qui arrange un peu les choses au niveau du comportement de timestamp.

Par ailleurs, j'ai modifié le champ date en DATETIME au lieu de TIMESTAMP. Maintenant, je cherche le moyen de bien mettre en forme une date appelée depuis un champ DATETIME.

Si je n'y parviens pas, je reviendrai à TIMESTAMP grâce à ton explication riche et précise.

SPASIBA
jeremiegimenez est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2006, 06h44   #4
Rédacteur/Modérateur

 
Avatar de Antoun
 
Homme Antoine Dinimant
Consultant en Business Intelligence
Inscription : octobre 2006
Messages : 5 854
Détails du profil
Informations personnelles :
Nom : Homme Antoine Dinimant
Âge : 42
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Consultant en Business Intelligence
Secteur : Conseil

Informations forums :
Inscription : octobre 2006
Messages : 5 854
Points : 9 540
Points : 9 540
Citation:
Envoyé par jeremiegimenez
Maintenant, je cherche le moyen de bien mettre en forme une date appelée depuis un champ DATETIME.
En utilisant les fonctions ad hoc de SQL ou de PHP. Voici
trois exemples pour obtenir du jj/mm/aaaa, je te laisse te reporter aux documentations officielles pour la liste des codes disponibles.
en MySQL :
Code :
1
2
 
SELECT DATE_FORMAT(une_date, '%d/%m/%Y') ;
en PHP :
Code :
1
2
3
 
echo date($une_date, 'd/m/Y') ; 
echo strftime($une_date, '%d/%m/%Y') ;
Citation:
Envoyé par jeremiegimenez
Si je n'y parviens pas, je reviendrai à TIMESTAMP grâce à ton explication riche et précise.
Si tu n'y parviens pas avec DATETIME, tu n'y arriveras pas non plus avec TIMESTAMP, parce que pour MySQL il n'y a pas de vraiment de différence entre les deux. Les TIMESTAMP ne sont qu'un cas particulier de DATETIME (plage de validité réduite et comportement d'horodatage automatique).

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html
Antoun est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/11/2006, 09h35   #5
Invité de passage
 
Inscription : novembre 2006
Messages : 3
Détails du profil
Informations forums :
Inscription : novembre 2006
Messages : 3
Points : 1
Points : 1
Citation:
Envoyé par Antoun

Les TIMESTAMP ne sont qu'un cas particulier de DATETIME (plage de validité réduite et comportement d'horodatage automatique).

--
Antoun

Guide complet MySQL 5, par Antoine Dinimant, éd. MicroApplication
http://www.microapp.com/livre_mysql_7873.html

Encore merci Antoun.

Mes encouragements pour ta prochaine accession au statut de Membre du forum*!
jeremiegimenez est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h02.


 
 
 
 
Partenaires

Hébergement Web