SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 04.09.2012 17:55:04

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Как хранить время в БД в Unix формате?

Здравствуйте. smile

Я в SQL новичок, так что не ругайте, если что)
Хотя PHP немного знаю) Проблема именно в том, чтобы составить запрос(ы) для PHP страницы.


Нашёл, что MySQL функция "SELECT UNIX_TIMESTAMP('2007-11-30 10:30:19');" возвращает unix формат (1196440219). Это мне и нужно.

Предположим, что человек в HTML форму (сама страница на PHP) вводит "человеческий" формат даты "2007-11-30 10:30:19".

На этом этапе никак не могу понять, какие нужно составить запросы (или запрос), чтобы
1) дата, которую ввёл человек передалась к MySQL.
2) MySQL сама сконвертировала эту дату в Unix формат (1196440219)
3) и чтобы это число сохранить в таблицу, например, WHERE id = '5'.

P.S. на сей момент я только научился использовать SELECT и INSERT INTO на примитивном уровне.

Заранее спасибо!

Отредактированно warma2d (04.09.2012 18:52:42)

Неактивен

 

#2 04.09.2012 23:32:00

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Как хранить время в БД в Unix формате?

А в каком формате Вы собираетесь хранить в БД? В timestamp или в datetime?


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#3 05.09.2012 19:18:10

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Re: Как хранить время в БД в Unix формате?

deadka, собираюсь хранить именно в Unix формате (1196440219).
Вы имеете в виду, хранить в каком типе данных? Поскольку это простое число, то собирался поставить просто integer.
Или "timestamp и  datetime" более подходящие? smile

Отредактированно warma2d (05.09.2012 19:18:51)

Неактивен

 

#4 05.09.2012 19:28:24

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Как хранить время в БД в Unix формате?

Вообще datetime и timestamp более подходящие - для этого и создавались.

Живой пример:

Код:

mysql> create table t_6073_d(t datetime);
Query OK, 0 rows affected (0.08 sec)

mysql> insert into t_6073_d(t) values('2012-01-01 11:22:33');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_6073_d;
+---------------------+
| t                   |
+---------------------+
| 2012-01-01 11:22:33 |
+---------------------+
1 row in set (0.00 sec)

и

Код:

mysql> create table t_6073(t timestamp);
Query OK, 0 rows affected (0.13 sec)

mysql> insert into t_6073(t) values('2012-01-01 11:22:33');
Query OK, 1 row affected (0.00 sec)

mysql> select * from t_6073;
+---------------------+
| t                   |
+---------------------+
| 2012-01-01 11:22:33 |
+---------------------+
1 row in set (0.00 sec)

Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

#5 05.09.2012 19:47:25

warma2d
Завсегдатай
Зарегистрирован: 12.08.2012
Сообщений: 33

Re: Как хранить время в БД в Unix формате?

Спасибо за ответ) Честно говоря, deadka, я не сразу понял, в чём отличие. А затем заметил, что с типом "datetime" быстрее создалась таблица (0.08 sec). В остальном, в роде отличий нет smile

Однако, я так и не понял, какие нужны запрос(ы), чтобы sad
1) дата, которую ввёл человек передалась к MySQL.
2) MySQL сама сконвертировала эту дату в Unix формат (1196440219)
3) и чтобы это число сохранить в таблицу, например, WHERE id = '5'.

Отредактированно warma2d (05.09.2012 19:47:52)

Неактивен

 

#6 05.09.2012 19:55:37

deadka
Администратор
Зарегистрирован: 14.11.2007
Сообщений: 2420

Re: Как хранить время в БД в Unix формате?

datetime от timestamp отличаются размером и тем, хранится ли временная зона.
Подробнее смотрите например http://habrahabr.ru/post/61391/

1) В примере, приведенном мной, в таблицу вставлялась дата в "человеческом" виде (2012-01-01 11:22:33). То есть при использовании этих типов данных mysql успешно конвертирует сам.

2) MySQL сам решает как хранить данные. Вас должно интересовать, в каком виде Вы хотите
из него эти данные получить.

Код:

mysql> select t,unix_timestamp(t) from t_6073;
+---------------------+-------------------+
| t                   | unix_timestamp(t) |
+---------------------+-------------------+
| 2012-01-01 11:22:33 |        1325406153 |
+---------------------+-------------------+
1 row in set (0.00 sec)

mysql> select t,unix_timestamp(t) from t_6073_d;
+---------------------+-------------------+
| t                   | unix_timestamp(t) |
+---------------------+-------------------+
| 2012-01-01 11:22:33 |        1325406153 |
+---------------------+-------------------+
1 row in set (0.00 sec)

3) Покажите структуру таблицы Вашей, куда хотите сохранить ( show create table t).
Если там уже есть запись, у которой id = 5, то надо update использовать, если нет, то insert.


Зеленый свет для слабаков, долги отдают только трусы, тру гики работают только в консоли...

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson