Eu tenho um campo em uma tabela MySQL que possui um timestamp
tipo de dados. Estou salvando dados nessa tabela. Mas quando passo o carimbo de data / hora ( 1299762201428
) para o registro, ele salva automaticamente o valor 0000-00-00 00:00:00
nessa tabela.
Como posso armazenar o carimbo de data / hora em uma tabela MySQL?
Aqui está minha INSERT
declaração:
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
fonte
fonte
Respostas:
passar assim
fonte
datetime
, se você quiser alterá-lo paratimestamp
, altere o tipo de coluna paravarchar(15)
strtotime
. editar: btw, timestamp cobre apenas um intervalo de todas as datas possíveis (1970-01-01 a xx-xx-2032 eu acho)Olá, use a
FROM_UNIXTIME()
função para isso.Como isso:
fonte
date('Y-m-d H:i:s','1299762201428')
?FROM_UNIXTIME
produz um tipo de data mysql nativo enquanto phpdate()
retorna uma string.fonte
Algumas coisas para esclarecer:
portanto, a resposta correta seria
fonte
O tipo de dados ' bigint unsigned ' pode atender a esse requisito.
fonte
Estou supondo que o campo no qual você está tentando salvar o valor é um campo de data e hora , mas não é, mas o mesmo parece ser verdadeiro para carimbos de data / hora . Nesse caso, o mysql espera que o formato seja Ano-mês-dia Hora: minuto: segundo. Para salvar o carimbo de data / hora, você terá que converter o campo para numérico usando uma consulta como
Se você estiver usando a hora atual, você pode usar now () ou current_timestamp.
fonte
Você também pode usar
now()
em sua consulta, ou seja:Ele usará o carimbo de data / hora atual.
fonte
Use
FROM_UNIXTIME()
.Nota: 1299762201428 se parece mais com um carimbo de data e hora em milissegundos (como Date () * 1 em JavaScript) e você provavelmente terá que dividir isso por 1000.
fonte
Verifique o tipo de campo na tabela, basta salvar o valor do carimbo de data / hora no tipo de dados,
bigint
etc.Não
datetime
tipofonte
Isso deve servir:
fonte
Se o carimbo de data / hora for a hora atual, você pode usar a
NOW()
função mysqlfonte
Use o
datetime
tipo de campo. Ele vem com muitas vantagens, como legibilidade humana (ninguém lê timestamps) e funções do MySQL .Para converter de um carimbo de data / hora Unix, você pode usar a função MySQL
FROM_UNIXTIME(1299762201428)
. Para converter de volta, você pode usarUNIX_TIMESTAMP
:SELECT UNIX_TIMESTAMP(t_time) FROM table_name
.Claro, se você não gosta função do MySQL, você pode sempre usar o PHP:
'INSERT INTO table_name SET t_time = ' . date('Y-m-d H:i:s', $unix_timestamp)
.fonte
timestamp
tipo de campo também pode ser lido por humanos (ao usarSELECT
no console). Eles são muito diferentes e ambos têm suas desvantagens / vantagens. A principal diferença é como os fusos horários estão sendo tratados.datetime
por vários motivos. Qual é a maior desvantagem / vantagem na sua opinião?timestamp
: ele corresponde melhor aos carimbos de data / hora do PHP, pois é imune às configurações de fuso horário do servidor e do cliente, enquantodatetime
altera o valor exibido dependendo do fuso horário do seu cliente MySQL (claro que depende do seu projeto, que um é melhor). maior desvantagem paratimestamp
: não suporta valores NULL e (não sei o que eles fizeram quando programaram) umTIMESTAMP NOT NULL
campo se torna umTIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP
. No meu caso, infelizmente, preciso usarTIMESTAMP
por motivos de TZ.Melhor é usar o tipo de dados
varchar(15)
.fonte
Você pode fazer:
$date = \gmdate(\DATE_ISO8601);
.fonte
Se eu souber que o banco de dados é MySQL, usarei a função NOW () assim:
fonte