У меня есть код C++, который сохраняет строку эпохи (преобразованную из объекта time_t) в столбец time базы данных MySQL (тип данных datetime).
Строка времени эпохи в C++ — это 1559333386, однако при сохранении в MySQL она показывает только дату, а часы, минуты и секунды отображаются как ноль: 2019-05-31 00:00:00.
Вопрос в том, как сохранить временную метку эпохи с полной информацией в базу данных MySQL в формате year-month-day hour:minute:second?
Спасибо.
Вот код:
std::time_t t = std::stof(time);
std::stringstream sstime;
sstime << std::put_time(std::gmtime(&t), "%F") << '\n';
Poco::Data::Statement sql_insert(*session);
sql_insert << "INSERT into history (uid, time) \
VALUES (?,?)",
Poco::Data::Keywords::bind(uid),
Poco::Data::Keywords::bind(sstime.str());
Также, пожалуйста, удалите код в комментариях. При необходимости вы можете отредактировать свой пост вместо этого.





Вот два возможных решения:
Один из них — выполнить некоторую предварительную обработку временной метки эпохи, чтобы изменить ее формат на YYYY-MM-DD HH24:MI:SS, а затем связать ее с оператором SQL.
Другой, на мой взгляд, немного странный и рискованный, я нашел его в разделе комментариев Документация ДАТАВРЕМЯ на веб-сайте MySQL, вот как:
SET @@timestamp := 1559333386;
INSERT INTO history (time) VALUES (NOW());
SET @@timestamp := DEFAULT;
Подробнее об этом в документации MySQL для системная переменная метки времени.
Выше приведены лишь некоторые рекомендации, я не проводил тестирования и проверки, не имея желаемых сред, пожалуйста, тщательно протестируйте его, прежде чем внедрять где-либо.
Спасибо за комментарии, я попробую оба метода.
Вот код:
std::time_t t = std::stof(time); std::stringstream sstime; sstime << std::put_time(std::gmtime(&t), "%F") << '\n'; Poco::Data::Statement sql_insert(*session); sql_insert << "INSERT into history (uid, time) \ VALUES (?,?)", Poco::Data::Keywords::bind(uid), Poco::Data::Keywords::bind(sstime.str());