@khodos_dmitry

Как вставить в mysql текущее время в милисекундах?

`updated` = NOW() + 0 у меня не работает почему-то
  • Вопрос задан
  • 1041 просмотр
Решения вопроса 1
ivankomolin
@ivankomolin
Если у вас mysql 5.6 и выше используйте это:
`updated` = NOW(3)

Если ниже, придется задавать через php.

Немного теории:
mysql> CREATE TABLE fractest( c1 TIME(2), c2 DATETIME(2), c3 TIMESTAMP(2) );
Query OK, 0 rows affected (0.33 sec)

mysql> INSERT INTO fractest VALUES
     > ('17:51:04.777', '2014-09-08 17:51:04.777', '2014-09-08 17:51:04.777');
Query OK, 1 row affected (0.03 sec)

mysql> SELECT * FROM fractest;
+-------------+------------------------+------------------------+
| c1          | c2                     | c3                     |
+-------------+------------------------+------------------------+
| 17:51:04.78 | 2014-09-08 17:51:04.78 | 2014-09-08 17:51:04.78 |
+-------------+------------------------+------------------------+
1 row in set (0.00 sec)


Обратите внимание как заданы типы данных TIME(2). Цифра в скобках означает количество символов после точки в итоге. Поддерживается до 6 цифр(микросекунды)
Также можно получить текущюю дату с точностью до микросекунд, пример:
SELECT NOW(6);
Это работает начиная с mysql 5.6.

В mysql 5.5 дату нужно хранить в таком же формате до 6 цифр после точки в виде строки, получить текущюю дату с точностью больше секунд нельзя. Единственное что есть в эту сторону это функция MICROSECOND. Она позволяет выделить дробную часть из строки с датой.
SELECT MICROSECOND('2010-12-10 14:12:09.019473');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
402d
@402d
начинал с бейсика на УКНЦ в 1988
читаем про типы полей.
понимаем, что точнее секунд стандартные типы не работают. пишем свою реализацию

1. храним в BIGINT
2. преобразовываем в "нормальное" время
select FROM_UNIXTIME(datefield/1000) from my_table
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы