Ответ 1
Вы можете отформатировать его, чтобы включить его. % F включает шестизначные микросекунды.
SELECT DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s.%f') FROM tbl
Когда я запрашиваю dateTime (6), PHP усекает мои 6 дробных секунд.
Вот пример моего php-кода:
$sql = 'SELECT date FROM tbl';
$statement = $connection->prepare($sql);
$statement->execute();
$statement->store_result();
$statement->bind_result($date);
while ($statement->fetch())
{
echo $date."\n";
}
Это возвращает 2014-01-08 21:31:15 вместо 2014-01-08 21: 31:15.995000, что и хранится в таблице. Как я могу получить то, что фактически хранится в таблице?
Вы можете отформатировать его, чтобы включить его. % F включает шестизначные микросекунды.
SELECT DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s.%f') FROM tbl
Проблема в адаптере PHP, который вы используете для связи с Mysql. Насколько я вижу, вы используете адаптер PDO для получения результата запроса. Однако этот адаптер не поддерживает доли секунды (ГГГГ-ММ-ДД ЧЧ: ММ: СС .F).
Адаптер PDO поддерживает ГГГГ-ММ-ДД ЧЧ: ММ: СС и автоматически форматирует значение столбцов даты и времени в этот формат.
Это ошибка в самом адаптере PDO. Пожалуйста, найдите ссылку ниже для справки: http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format-of-datetime-fields
Это безумие, это до сих пор официально не поддерживается mysqli
в PHP 7.1, но в любом случае, здесь работа.
select concat(`DateTime6`)`DateTime6` from ...
В основном, литье его как строки работало для меня, как уродливое, как это.
Эта ошибка была обнаружена в пакете PHP Mysql (PECL) и долгие годы находилась в неразрешенном состоянии. Это было окончательно исправлено в PHP v7.3.0.
Для получения подробной информации об ошибке: https://bugs.php.net/bug.php?id=76386
в вашем случае вы можете сохранить значение в MySQL как VARCHAR и case/преобразовать его в datetime при его чтении.
У меня была такая же проблема, и мне ничего не помогло, кроме преобразования
DateTime не поддерживает разделенные секунды (микросекунды или миллисекунды и т.д.).