5

我最近将服务器上运行的 PHP 版本升级到 5.3.20。从那时起,每当我从 MSSQL 数据库 (mssql_query) 中提取日期时间时,我都会收到奇怪的错误日期。

我检查了语言环境设置,默认时区设置为“澳大利亚/布里斯班”,我还检查了 php.ini 设置并确认mssql.datetimeconvert已关闭。The dates seem to come through preformatted (without seconds) when the option is turned on, however when the option is turned off I get a date that looks like this.

mssql.datetimeconvert (关闭):2013-07-38 16:00:20

mssql.datetimeconvert(开启):2013 年 2 月 7 日晚上 9:37

有简单的解决方法吗?

这是比较 mysql/mssql 源之间的输出的代码:

$rs = $db->query("select id, servertime from bobstable where id = 86427420");
$mss_set = mssql_query("select id, servertime from T_bobstable WITH (NOLOCK) where id = 86427420");

$myrow = $rs->fetch_assoc();
$msrow = mssql_fetch_array($mss_set);

var_dump($myrow);
echo "<br>";
var_dump($msrow);

其输出如下:

array(2) { ["id"]=> string(8) "86427420" ["servertime"]=> string(19) "2013-02-08 14:00:24" } 
array(4) { [0]=> float(86427420) ["id"]=> float(86427420) [1]=> string(19) "2013-08-39 24:673:0" ["servertime"]=> string(19) "2013-08-39 24:673:0" }

这是我从 SQL Server Studio 收到的输出

2013-02-08 14:00:24.673

我可以理解它是如何被格式化的(因为这部分问题在下面得到了回答)但我不明白为什么它会以这种格式出现,或者如何更改 PHP 的配置以避免这种情况。在我升级 PHP 之前,它曾经是2013-02-08 14:00:24。有没有人经历过或看到过这种情况?

4

2 回答 2

1

找到了一个似乎坚持的解决方案: -

我将安装在服务器上的 FreeTDS 版本从以下位置降级:

freetds.x86_64 0.91-2.el5  to 
freetds.x86_64 0.64-11.el5.centos

这确定了日期。

不知道为什么。

于 2013-02-10T21:52:47.823 回答
0

今天 2 月 7 日,DAYOFYEAR() 是 38。

可能问题出在日期格式上

于 2013-02-07T22:19:40.007 回答