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

#php #mysql #database #sql-insert

#php #mysql #База данных #sql-вставка

Вопрос:

У меня есть поле в таблице MySQL, которое имеет timestamp тип данных. Я сохраняю данные в эту таблицу. Но когда я передаю временную метку ( 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')
  

Комментарии:

1. О какой метке времени вы говорите? Где вы это взяли?

2. можете ли вы вставить сюда структуру своей таблицы?

Ответ №1:

передайте следующим образом

 date('Y-m-d H:i:s','1299762201428')
  

Комментарии:

1. но значение, которое вы получаете в базе данных, показывает тип столбца datetime , если вы хотите изменить его на timestamp , тогда измените тип столбца на varchar(15)

2. Затем поместите ее в поле INT. В любом случае, временная метка — это всего лишь представление даты, и наоборот. Вы можете преобразовать временную метку в дату с помощью функции, о которой вам говорил Джимми, и другим способом с помощью strtotime . редактировать: кстати, временная метка охватывает только диапазон всех возможных дат (с 1970-01-01 по xx-xx-2032, я думаю)

3. итак, в чем польза от типа данных timestamp? поле s_time имеет тип данных метки времени. Не могу ли я сохранить 1299762201428 в это поле?

4. @lakum4stackof: Для определения типа данных временной метки, пожалуйста, обратитесь к dev.mysql.com/doc/refman/5.0/en/timestamp.html подробнее.

5. @lakum4stackof — использование timestamp заключается в том, что вы сохраняете временную метку, но она отображается только как дата. Внутренне (как и все типы данных) она хранится как целое число со знаком. Если вы также хотите отформатировать эту метку времени как целое число, я предлагаю вам просто использовать поле INT. Использование столбца метки времени — это обработка даты (добавление интервалов и тому подобное).

Ответ №2:

Привет, используй для этого 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')
  

Комментарии:

1. Почему это лучше, чем date('Y-m-d H:i:s','1299762201428') ?

2. Безопасность типов: FROM_UNIXTIME выдает собственный тип даты mysql, в то время как php date() возвращает строку.

3. Это лучше, потому что веб-сервер (PHP) и MySQL могут находиться в разных местах. Итак, date(‘Y-m-d H: i:s’, ‘1299762201428’) установит часовой пояс веб-сервера. С разными веб-серверами, размещенными в разных зонах, у вас будут противоречивые данные. В качестве альтернативы, в вашем коде вы должны принудительно установить часовой пояс приложения в часовой пояс MySQL. date_timezone_set

Ответ №3:

 $created_date = date("Y-m-d H:i:s");
$sql = "INSERT INTO $tbl_name(created_date)VALUES('$created_date')";
$result = mysql_query($sql);
  

Ответ №4:

Некоторые вещи, которые нужно прояснить:

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

следовательно, правильный ответ был бы

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

Ответ №5:

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

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

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

Ответ №6:

Тип данных ‘bigint без знака‘ может соответствовать этому требованию.

Ответ №7:

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

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

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

Ответ №8:

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

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

Ответ №9:

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

Не datetime введите

Ответ №10:

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

   $time = new DateTime; 
  

Ответ №11:

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

Ответ №12:

Используйте 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('Y-m-d H:i:s', $unix_timestamp) .

Комментарии:

1. timestamp Тип поля также доступен для чтения человеком (при использовании SELECT в консоли). Они очень разные, и у обоих есть свои недостатки / преимущества. Основное отличие заключается в том, как обрабатываются часовые пояса.

2. @Udo G: Вы правы, но я все еще предпочитаю datetime по разным причинам. Что, по вашему мнению, является самым большим недостатком / преимуществом?

3. самое большое преимущество для timestamp : оно лучше соответствует временным меткам PHP, поскольку не зависит от настроек часового пояса как сервера, так и клиента, тогда как datetime изменяет свое отображаемое значение в зависимости от часового пояса вашего клиента MySQL (конечно, это зависит от вашего проекта, какой из них лучше). самый большой недостаток для timestamp : он не поддерживает значения NULL и (я не знаю, что они курили, когда программировали это) TIMESTAMP NOT NULL поле становится TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP . В моем случае мне, к сожалению, нужно использовать TIMESTAMP по причинам TZ.

Ответ №13:

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

Комментарии:

1. Сохранение числа в виде строки обычно не является хорошей практикой, поскольку строки по сравнению с ней медленнее и сложнее выполнять вычисления.

2. Мой голос отдается за unsigned int — но давайте спустимся в кроличью нору. Почему varchar, а не char? Это запись фиксированной длины — микрооптимизация, но все же…

3. временная метка равна int, вы не должны использовать varchar для такого значения

Ответ №14:

Вы можете сделать: $date = gmdate(DATE_ISO8601); .

Ответ №15:

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

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

Комментарии:

1. Это сохранит только текущую временную метку, а не строго то, что запрашивает OP.