php PDO dblib日期格式不同于tsql

ttcibm8c  于 2023-02-21  发布在  PHP
关注(0)|答案(1)|浏览(82)

我有一台CentOS 7机器运行PHP,安装了webtatic PHP 5.6和php56 w-mssql包。我的应用程序在Laravel框架中连接到MSSQL 2012数据库。
我已经修改了locales.conf文件,使它包含的所有内容

[default]
    date format = %Y-%m-%d %I:%M:%S.000

当在tsql中运行查询时,我会得到格式正确的日期,包括末尾的毫秒零,但是,当在PHP交互模式下或通过artisontinker运行查询时,我会得到没有尾随毫秒的日期格式。
我有一台Ubuntu机器运行完全相同的配置,tsql、PHP和工匠tinker都给予我返回了正确格式化的日期,只是这台CentOS机器有问题。
我的freetds.conf将tds version 7.4设置为全局设置,并且具有host条目(这是Laravel中当前配置的),即

[fancy]
    host = 10.0.0.12
    port = 1433
    database = fancy
    tds version = 7.4
    client charset = UTF-8
tzdcorbm

tzdcorbm1#

您遇到的问题可能与CentOS 7的默认PHP配置有关。默认情况下,CentOS 7使用的是PHP的系统版本,通常与Webtatic提供的版本不同。这可能会导致使用php56 w-mssql包时出现日期格式问题。
要确保使用正确的PHP版本,可以尝试在运行命令时显式指定PHP二进制文件。例如,可以尝试运行/usr/bin/php56 -a/usr/bin/php56 artisan tinker,而不是运行php -aphp artisan tinker
另一个可能的解决方案是修改php.ini文件以包含以下设置:

date.timezone = UTC

这可以通过在php.ini文件的底部添加上面的代码行来完成,php.ini文件通常位于/etc/php.ini中。

如果上述解决方案不起作用,您可以尝试升级到更新版本的PHP,因为php56 w-mssql包可能与CentOS 7不完全兼容。或者,您可以尝试使用不同的包或手动从源代码编译PHP。

最后,您可以尝试使用SQL Server Management Studio(SSMS)运行相同的查询,并检查问题是否仍然存在。* 如果日期格式在SSMS中正确,但在PHP中不正确,则问题可能与PHP配置或包 * 有关,而不是SQL Server配置。

相关问题