J'ai un champ dans une table MySQL qui a un timestamp
type de données. J'enregistre des données dans cette table. Mais lorsque je passe l'horodatage ( 1299762201428
) à l'enregistrement, il enregistre automatiquement la valeur 0000-00-00 00:00:00
dans cette table.
Comment puis-je stocker l'horodatage dans une table MySQL?
Voici ma 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')
php
mysql
database
sql-insert
Gautamlakum
la source
la source
Réponses:
passer comme ça
la source
datetime
, si vous voulez le changer pourtimestamp
ensuite changer le type de colonne envarchar(15)
strtotime
. edit: btw, horodatage ne couvre qu'une plage de toutes les dates possibles (1970-01-01 à xx-xx-2032 je pense)Hé là, utilisez la
FROM_UNIXTIME()
fonction pour cela.Comme ça:
la source
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
type de date mysql natif tandis que phpdate()
renvoie une chaîne.la source
Quelques points à clarifier:
donc la bonne réponse serait
la source
Le type de données « bigint unsigned » peut répondre à cette exigence.
la source
Je suppose que le champ dans lequel vous essayez d'enregistrer la valeur est un champ datetime, ce n'est pas le cas, mais la même chose semble être vraie pour les horodatages . Si c'est le cas, mysql s'attend à ce que le format soit Année-mois-jour Heure: minute: seconde. Pour enregistrer l'horodatage, vous devrez convertir le champ en numérique à l'aide d'une requête telle que
Si vous utilisez l'heure actuelle, vous pouvez utiliser now () ou current_timestamp.
la source
Vous pouvez également utiliser
now()
dans votre requête, c'est-à-dire:Il utilisera l'horodatage actuel.
la source
Utilisation
FROM_UNIXTIME()
.Remarque: 1299762201428 ressemble plus à un horodatage en millisecondes (comme Date () * 1 en JavaScript), et vous devez probablement le diviser par 1000.
la source
Vérifiez le type de champ dans la table, enregistrez simplement la valeur de l'horodatage dans le type de données, comme
bigint
etc.Pas de
datetime
typela source
Cela devrait le faire:
la source
Si l'horodatage est l'heure actuelle, vous pouvez utiliser la
NOW()
fonction mysqlla source
Utilisez
datetime
le type de champ. Il présente de nombreux avantages comme la lisibilité humaine (personne ne lit les horodatages) et les fonctions MySQL .Pour convertir à partir d'un horodatage unix, vous pouvez utiliser la fonction MySQL
FROM_UNIXTIME(1299762201428)
. Pour reconvertir , vous pouvez utiliserUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Bien sûr, si vous ne faites pas comme fonction MySQL, vous pouvez toujours utiliser PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.la source
timestamp
type de champ est également lisible par l'homme (lors de l'utilisationSELECT
dans la console). Ils sont très différents et ont tous deux leurs inconvénients. La principale différence réside dans la manière dont les fuseaux horaires sont gérés.datetime
pour diverses raisons. Quel est le plus gros dés / avantage à votre avis?timestamp
: il correspond mieux aux horodatages PHP car il est immunisé contre les paramètres de fuseau horaire du serveur et du client, alorsdatetime
que la valeur affichée change en fonction du fuseau horaire de votre client MySQL (bien sûr cela dépend de votre projet, qui on est mieux). le plus gros inconvénient pourtimestamp
: il ne supporte pas les valeurs NULL et (je ne sais pas ce qu'ils ont fumé quand ils ont programmé cela) unTIMESTAMP NOT NULL
champ devient unTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. Dans mon cas, je dois malheureusement utiliserTIMESTAMP
pour des raisons TZ.Mieux vaut utiliser le type de données
varchar(15)
.la source
Vous pouvez le faire:
$date = \gmdate(\DATE_ISO8601);
.la source
Si je sais que la base de données est MySQL, j'utiliserai la fonction NOW () comme ceci:
la source