Некорректное значение даты и времени для столбца, определенного как TIMESTAMP в MySQL [duplicate]

Ошибки округления с плавающей запятой. 0,1 не могут быть представлены точно в базе-2, как в базе-10, из-за недостающего простого коэффициента 5. Так же, как 1/3 принимает бесконечное число цифр для представления в десятичной форме, но составляет «0,1» в базе-3, 0.1 принимает бесконечное число цифр в базе-2, где оно не находится в базе-10. И компьютеры не имеют бесконечного объема памяти.

4
задан CycleGeek 24 February 2016 в 14:01
поделиться

4 ответа

Мне потребовалось некоторое время, чтобы понять это ...

Проблема в том, что «2011-03-13 02:53:50» является незаконным из-за перехода на летнее время между 2 и 3 AM, поэтому все временные значения между 2 и 3 часами утра в любой день введения ДСТ недействительны. То же самое для '2016-03-13 02:32:21' и т. Д.

Измените системный часовой пояс на тот, который не использует DST, и вы должны быть в порядке.

13
ответ дан nik 25 August 2018 в 16:38
поделиться

Все еще не уверен, что проблема / была, может быть, комбинация версий CentOS и MySQL. Я изменил столбец на datatime (6) вместо timestamp (6), и мне удалось успешно импортировать все мои данные.

0
ответ дан CycleGeek 25 August 2018 в 16:38
поделиться

Я думаю, вам нужно использовать некоторые str-преобразования в MySQL перед вставкой. Или подготовить данные в соответствующем формате, прежде чем делать запрос к MySQL.

Формат микросекунд также неверен. Документация MySQL четко заявляет об этом :

Значение DATETIME или TIMESTAMP может включать в себя конечную часть дробных секунд до микросекунд (6 цифр) точность.


UPDATE: на моем localhost у меня есть ту же версию MySQL, и она работает. Попытался выполнить преобразование

select str_to_date("2011-03-13 02:53:50.000000", "%Y-%m-%d %H:%i:%s.%f") as `t`

и получил:

+----------------------------+
| t                          |
+----------------------------+
| 2011-03-13 02:53:50.000000 |
+----------------------------+
1 row in set (0.00 sec)

Вот [SQL] SQLFiddle, который подтверждает вещь в другой версии MySQL.

У меня заканчиваются идеи, я думаю, что проблема связана с «локальным сбоем» в структуре таблицы или конкретной версией MySQL + OS.

1
ответ дан Farside 25 August 2018 в 16:38
поделиться

Вам нужно попробовать следующее:

STR_TO_DATE( '2011/03/13 02:53:50', '%Y/%m/%d %H:%i:%s')

, иначе вы должны вставить даты, используя разделитель тире (-), например

'2011-03-13 02:53:50' 

SQL FIDDLE DEMO

0
ответ дан Rahul Tripathi 25 August 2018 в 16:38
поделиться
Другие вопросы по тегам:

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