D'économie d'horodatage dans la table mysql à l'aide de php
J'ai un champ dans une table MySQL qui a un timestamp
type de données. Je suis de l'enregistrement des données dans cette table. Mais quand je passe le timestamp (1299762201428
) pour l'enregistrement, il enregistre automatiquement la valeur 0000-00-00 00:00:00
dans cette table.
Comment puis-je stocker le timestamp dans une table MySQL?
Voici mon INSERT
déclaration:
INSERT INTO table_name (id,d_id,l_id,connection,s_time,upload_items_count,download_items_count,t_time,status)
VALUES (1,5,9,'2',1299762201428,5,10,20,'1'),
(2,5,9,'2',1299762201428,5,10,20,'1')
- Ce timestamp vous êtes en train de parler? Où l'avez-vous?
- u peut coller ur structure de la table ici ?
Vous devez vous connecter pour publier un commentaire.
passer comme cela
datetime
, si vous voulez la changertimestamp
puis changez le type de colonne àvarchar(15)
strtotime
. edit: btw, timestamp ne couvre qu'une fourchette de dates possibles (1970-01-01 à xx-xx-2032 je pense)Hé là, utilisez la
FROM_UNIXTIME()
de la fonction pour cela.Comme ceci:
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
donne un natif mysql de type date alors que le php estdate()
retourne une chaîne de caractères.Certaines choses à préciser:
donc la réponse correcte serait
Type de données 'bigint unsigned' peuvent répondre à cette exigence.
Je suppose que le champ que vous essayez d'enregistrer la valeur dans un champ datetime il n'est pas, mais cela semble être vrai pour les horodatages. Si oui, mysql attend le format Année-mois-jour Heure:minute:seconde. Pour enregistrer le timestamp vous faudra convertir le champ numérique à l'aide d'une requête comme
Si vous utilisez l'heure actuelle, vous pouvez utiliser maintenant() ou current_timestamp.
Utilisation
FROM_UNIXTIME()
.Remarque: 1299762201428 ressemble plus à un ordre de la milliseconde d'horodatage (Date()*1 en JavaScript), et vous avez probablement déjà à la diviser par 1000.
Vérifier le type de champ dans la table juste à gagner du temps cachet de la valeur dans le type de données comme
bigint
etc.Pas
datetime
typeCela devrait le faire:
Si le timestamp est à l'heure actuelle, vous pouvez utiliser le mysql
NOW()
fonctionUtilisation
datetime
type de champ. Il est livré avec de nombreux avantages comme une meilleure lisibilité (personne ne lit les horodatages) et Les fonctions de MySQL.Pour convertir à partir d'un timestamp unix, vous pouvez utiliser MySQL fonction
FROM_UNIXTIME(1299762201428)
. Pour convertir le dos, vous pouvez utiliserUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Bien sûr, si vous n'aimez pas MySQL fonction, vous pouvez toujours utiliser PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.timestamp
type de champ est lisible par l'homme de trop (lors de l'utilisation deSELECT
dans la console). Ils sont très différents et ont tous les deux leur dis/avantages. La principale différence est la façon dont les fuseaux horaires sont traitées.datetime
pour diverses raisons. Quelle est la plus grande dis/avantage, à votre avis?timestamp
: il correspond mieux au PHP horodateurs comme il est à l'abri des paramètres de fuseau horaire à la fois le serveur et le client, alors quedatetime
changements, il est affiche valeur en fonction du fuseau horaire de votre client MySQL (bien sûr cela dépend de votre projet, lequel est le mieux). plus gros désavantage pourtimestamp
: il ne prend pas en charge les valeurs NULL et (je ne sais pas ce qu'ils ont fait de la fumée quand ils ont programmé cette) unTIMESTAMP NOT NULL
champ devient unTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. Dans mon cas, je n'ai malheureusement besoin pour utiliserTIMESTAMP
pour TZ raisons.Mieux est d'utiliser le type de données
varchar(15)
.Vous pouvez utiliser
now()
aussi bien dans votre requête, c'est à dire :Il va utiliser le timestamp actuel.
Que vous pouvez faire:
$date = \gmdate(\DATE_ISO8601);
.Si je sais que la base de données est MySQL, je vais utiliser la fonction NOW() comme ceci: