Tengo un campo en una tabla MySQL que tiene un timestamp
tipo de datos. Estoy guardando datos en esa tabla. Pero cuando paso la marca de tiempo ( 1299762201428
) al registro, automáticamente guarda el valor 0000-00-00 00:00:00
en esa tabla.
¿Cómo puedo almacenar la marca de tiempo en una tabla MySQL?
Aquí está mi INSERT
declaración:
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
fuente
fuente
Respuestas:
pasar así
fuente
datetime
, si desea cambiarlo,timestamp
cambie el tipo de columna avarchar(15)
strtotime
. editar: por cierto, la marca de tiempo solo cubre un rango de todas las fechas posibles (1970-01-01 a xx-xx-2032 creo)Hola, usa la
FROM_UNIXTIME()
función para esto.Me gusta esto:
fuente
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
produce un tipo de fecha de mysql nativo mientras que phpdate()
devuelve una cadena.fuente
Algunas cosas para aclarar:
por lo tanto, la respuesta correcta sería
fuente
El tipo de datos ' bigint unsigned ' puede adaptarse a este requisito.
fuente
Supongo que el campo en el que está tratando de guardar el valor es un campo de fecha y hora que no lo es, pero lo mismo parece ser cierto para las marcas de tiempo . Si es así, mysql espera que el formato sea Año-mes-día Hora: minuto: segundo. Para guardar la marca de tiempo, tendrá que convertir el campo a numérico usando una consulta como
Si está usando la hora actual, puede usar now () o current_timestamp.
fuente
También puede utilizar
now()
en su consulta, es decir:Utilizará la marca de tiempo actual.
fuente
Utilice
FROM_UNIXTIME()
.Nota: 1299762201428 se parece más a una marca de tiempo de milisegundos (como Date () * 1 en JavaScript), y probablemente tenga que dividir eso por 1000.
fuente
Verifique el tipo de campo en la tabla, simplemente guarde el valor de la marca de tiempo en el tipo de datos como,
bigint
etc.No
datetime
escribafuente
Esto debería hacerlo:
fuente
Si la marca de tiempo es la hora actual, puede usar la
NOW()
función mysqlfuente
Utilice el
datetime
tipo de campo. Viene con muchas ventajas como la legibilidad humana (nadie lee las marcas de tiempo) y las funciones de MySQL .Para convertir desde una marca de tiempo Unix, puede usar la función MySQL
FROM_UNIXTIME(1299762201428)
. Para convertir de nuevo se puede utilizarUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Por supuesto, si no te gusta la función de MySQL, siempre se puede usar PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.fuente
timestamp
tipo de campo también es legible por humanos (cuando se usaSELECT
en la consola). Son muy diferentes y ambos tienen sus desventajas. La principal diferencia es cómo se manejan las zonas horarias.datetime
por varias razones. ¿Cuál es la mayor desventaja en su opinión?timestamp
: coincide mejor con las marcas de tiempo de PHP, ya que es inmune a la configuración de la zona horaria tanto del servidor como del cliente, mientras quedatetime
cambia el valor que se muestra según la zona horaria de su cliente MySQL (por supuesto, depende de su proyecto, que uno es mejor). mayor desventaja paratimestamp
: no admite valores NULL y (no sé qué fumaron cuando programaron esto) unTIMESTAMP NOT NULL
campo se convierte en unTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. En mi caso, desafortunadamente necesito usarloTIMESTAMP
por razones de TZ.Mejor es usar el tipo de datos
varchar(15)
.fuente
Que puede hacer:
$date = \gmdate(\DATE_ISO8601);
.fuente
Si sé que la base de datos es MySQL, usaré la función NOW () así:
fuente