Сохранение метки времени в таблице mysql с использованием php

У меня есть поле в таблице MySQL, у которой есть тип данных timestamp . Я сохраняю данные в этой таблице. Но когда я 1299762201428 метку времени ( 1299762201428 ) в запись, она автоматически сохраняет значение 0000-00-00 00:00:00 в эту таблицу.

Как сохранить временную метку в таблице MySQL?

Вот мой оператор INSERT :

 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') 

проходите так

 date('Ymd H:i:s','1299762201428') 

Эй, используйте FROM_UNIXTIME() для этого.

Как это:

 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',FROM_UNIXTIME(1299762201428),5,10,20,'1'), (2,5,9,'2',FROM_UNIXTIME(1299762201428),5,10,20,'1') 
 $created_date = date("Ymd H:i:s"); $sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')"; $result = mysql_query($sql); 

Некоторые вещи, чтобы уточнить:

  • Тип поля timestamp MySQL не хранит временные метки unix, а скорее значение типа datetime.
  • Временная метка UNIX – это номер регулярного типа int.
  • Временная метка, о которой вы говорите, не является обычной временной отметкой unix, а меткой времени с миллисекундами.

поэтому правильный ответ был бы

 $timestamp = '1299762201428'; $date = date('Ymd H:i:s', substr($timestamp, 0, -3)); 

Datatype ' bigint unsigned ' может удовлетворить это требование.

Я предполагаю, что поле, в котором вы пытаетесь сохранить значение, является полем datetime, это не так, но похоже, что это верно для временных меток . Если так, то mysql ожидает, что формат будет Year-month-day Hour: минута: секунда. Чтобы сохранить временную метку, вам нужно будет преобразовать поле в числовое значение, используя запрос типа

 alter table <table_name> change <field> <field> bigint unsigned 

Если вы используете текущее время, вы можете использовать now () или current_timestamp.

Это должно сделать это:

  $time = new DateTime; 

Используйте FROM_UNIXTIME() .

Примечание: 1299762201428 больше похожа на миллисекунду timestamp (например, Date () * 1 в JavaScript), и вам, вероятно, придется разделить это на 1000.

Лучше использовать тип данных varchar(15) .

Проверить тип поля в таблице, просто сохранить значение метки времени в bigint данных, например, bigint и т. Д.

Не тип datetime

Вы можете использовать now() также в своем запросе, то есть:

 insert into table (time) values(now()); 

Он будет использовать текущую временную метку.

Если временная метка является текущим временем, вы можете использовать функцию mysql NOW()

Используйте datetime поля datetime . Он имеет множество преимуществ, таких как удобство чтения (никто не читает временные метки) и функции MySQL .

Для преобразования из временной метки unix вы можете использовать функцию MySQL FROM_UNIXTIME(1299762201428) . Для преобразования назад вы можете использовать UNIX_TIMESTAMP : SELECT UNIX_TIMESTAMP(t_time) FROM table_name .

Конечно, если вам не нравится функция MySQL, вы всегда можете использовать PHP: 'INSERT INTO table_name SET t_time = ' . date('Ymd H:i:s', $unix_timestamp) 'INSERT INTO table_name SET t_time = ' . date('Ymd H:i:s', $unix_timestamp) .

Если я знаю, что база данных – это MySQL, я буду использовать функцию NOW () следующим образом:

 INSERT INTO table_name (id, name, created_at) VALUES (1, 'Gordon', NOW())