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 变量