简而言之,问题是:同一个数据库在不同的服务器上以不同的格式返回日期,我无法将其配置为更正日期格式。
我有以下情况:一个基于 PHP 的 Web 应用程序,它从 Microsoft FoxPro 9 数据库中获取数据。使用 OleDB 建立数据库连接。在 PHP 中,这通过 COM 对象利用 ADODB:
$this->connection = new COM("ADODB.Connection");
$this->connection->Open($this->connectionString);
连接字符串如下所示:
Provider=VFPOLEDB.1; Mode=Share Deny None; Window Handle=0;
Locale Identifier=1033; Prompt=4; Extended Properties=0;
User ID=; Password=; Mask Password=False; Cache Authentication=False;
Encrypt Password=False; OLE DB Services=0; Collating Sequence=MACHINE; DSN=;
DELETED=True; ENGINEBEHAVIOR=80; TABLEVALIDATE=0;
Data Source=\\path\to\file.DBC
该程序部署在世界各地的不同服务器上,在不同版本的 Windows Server (2003-2008 R2) 上运行。查询的执行方式如下:
$this->connection->Execute($query);
这将返回一个包含所有纯文本值的结果集。这就是问题出现的地方。数据库不使用相同的日期格式,这使得以后在 PHP 中处理日期变得困难。到目前为止,该应用程序可以处理美国格式:mm/dd/yyyy 和荷兰格式:dd-mm-yyyy。该程序只是假设当日期包含斜杠时使用美国格式,当有连字符时使用 dmy 格式。这一直很好,但现在我们最近将该程序部署到巴西的一个服务器上,它以巴西格式 dd/mm/yyyy 返回日期。该程序现在显然将其与美国格式混淆了。
我一直试图让数据库以不同的日期格式(美国)报告,但无济于事。在两个不同的开发环境中,将 windows 的区域设置更改为不同的国家会立即改变数据库使用的日期格式。这些开发环境都是 Windows 7 系统。但是,这不适用于装有 Windows Server 的服务器。我已经更改了多台服务器上的所有区域设置(格式、位置和系统区域设置),但没有任何结果。即使在使用正确的区域设置重新启动或重新安装 FoxPro 之后。数据库继续以它们似乎卡住的日期格式进行报告。
有人知道如何更改 FoxPro 在 Windows Server 环境中使用的日期格式吗?
我探索过的其他选项包括将区域信息放入 DSN,但我找不到任何可能的方法。SET DATE TO .....
此外, OleDB 不接受FoxPro 语句。更改应用程序以理解巴西格式或添加一堆 if-else 语句似乎不是一个可行的解决方案。