PHP如何从Mysql返回日期时间(6)?

Posted

技术标签:

【中文标题】PHP如何从Mysql返回日期时间(6)?【英文标题】:PHP How to return datetime(6) from Mysql? 【发布时间】:2014-03-28 09:45:15 【问题描述】:

当我查询 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。如何获取表中实际存储的内容?

【问题讨论】:

不支持 mysql 5.6.4 之前的小数值。可能没有办法做你想做的事。见this reference 我没有问题将 DATETIME(6) 值以小数秒存储在我的表中。我什至可以直接在 mysql 中进行查询并返回小数秒。只有在 PHP 中才会保留毫秒。我也在使用 MySQL 5.6.13 在 5.6.13 上可以存储微秒很奇怪 @Landon 哦,好吧,那么这个主意可以吗。看起来PHP是罪魁祸首。也许 PHP5.6 会有所帮助... @Mihai 为什么自 5.6.4 以来 mysql 支持小数秒时会很奇怪 【参考方案1】:

问题在于您用于与 Mysql 通信的 PHP 适配器。据我所知,您正在使用 PDO 适配器来获取查询结果。但是,此适配器不支持小数秒 (YYYY-MM-DD HH:MM:SS.F)。

PDO 适配器支持 YYYY-MM-DD HH:MM:SS 并自动将日期时间列的值格式化为此格式。

这是 PDO 适配器本身的错误。请找到以下链接以供参考: http://grokbase.com/t/php/php-bugs/11524dvh68/php-bug-bug-54648-new-pdo-forces-format-of-datetime-fields

【讨论】:

【参考方案2】:

您可以对其进行格式化以包含它。 %f 包括 six-digit microseconds。

 SELECT DATE_FORMAT(date, '%Y-%m-%d %H:%i:%s.%f') FROM tbl

【讨论】:

或者只做 CONCAT(date) 以节省您提供格式的时间。默认的 DATETIME 格式是在句点后包含小数秒。 时间部分的小错字... %H:%i:%s.%f @malhal,你真是个天才,谢谢!愚蠢的是,现在是 2018 年,没有任何内置的 PHP 函数(请注意,PHP 7.1)无法正确处理 MySQL 的小数秒【参考方案3】:

这很疯狂,在 PHP 7.1 中 mysqli 仍然没有正式支持,但无论如何,这里有一个解决方法。

select concat(`DateTime6`)`DateTime6` from ...

基本上将它转换为字符串对我有用,尽管如此丑陋。

【讨论】:

【参考方案4】:

这个错误最终在 PHP v7.3.0 中得到修复。

相关bug详情:https://bugs.php.net/bug.php?id=76386

【讨论】:

【参考方案5】:

DateTime 不支持分秒(微秒或毫秒等)

http://www.php.net/manual/en/class.datetime.php

https://bugs.php.net/bug.php?id=51950

【讨论】:

我认为这不适用于这里,因为当您使用 PHP 从 mysql 中选择数据时,无论表中定义的数据类型如何,数据类型总是作为字符串返回。 你试过 print_r 而不是 echo 吗?看起来很奇怪,它并没有吐出数据库中的内容 这很奇怪。我试过 print_r 仍然没有返回小数秒 对于调试,我会尝试使用旧式 mysqli mysqli_query() 等。只是看看你是否得到相同的结果。 对不起,是的。准备好的语句有一个旧错误,但它应该在很久以前就已修复。这里也许,在页面底部 --> dev.mysql.com/doc/refman/5.0/en/…【参考方案6】:

在您的情况下,您可以将 MySQL 中的值保存为 VARCHAR 并在读取时将其转换为日期时间。

我遇到了同样的问题,除了转换之外没有任何帮助

【讨论】:

以上是关于PHP如何从Mysql返回日期时间(6)?的主要内容,如果未能解决你的问题,请参考以下文章

仅从日期时间字段(mysql)中提取日期并将其分配给 php 变量

如何从 MySQL 中的日期时间中减去小时数?

如何将日期从excel上传到mysql? (使用 php)

查询从日期时间转换为日期mysql

如何在 laravel php 中使用 ajax 根据日期范围从 mysql 数据库中检索数据?

MySQL从青铜到王者第五篇:MySQL内置函数