问题很简单:同一个数据库在不同的服务器上以不同的格式返回日期,我无法将其配置为更正日期格式。
我有以下情况: 基于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。程序只假设当日期包含斜杠时,使用US格式,当有连字符时,使用d-m-y格式。 这已经很好了,但现在我们最近将程序部署到巴西的服务器,该服务器返回巴西格式的日期dd / mm / yyyy。该程序显然现在将其与美国格式混淆。
我一直试图让数据库以不同的日期格式(美国)报告无济于事。 在两个不同的开发环境中,将窗口的区域设置更改为其他国家/地区会立即更改数据库使用的日期格式。这些开发环境都是Windows 7系统。 但是,这在使用Windows Server的服务器上不起作用。 我已在多台服务器上更改了所有区域设置(格式,位置和系统区域设置),但没有任何结果。即使重新启动或使用正确的区域设置重新安装FoxPro也是如此。数据库以他们似乎陷入的日期格式继续报告。
有人知道如何在Windows Server环境中更改FoxPro使用的日期格式吗?
我探讨的其他选项包括将区域信息放入DSN,但我找不到任何可能的方法。 OleDB也不接受FoxPro语句SET DATE TO .....
。
改变应用程序以理解巴西格式或添加一堆if-else语句似乎不是一个可行的解决方案。
答案 0 :(得分:1)
FoxPro日期类型对日期格式不敏感。也就是说,如果您只是将值作为日期(日期时间)返回而不是转换为字符,那么您应该没有任何问题。
答案 1 :(得分:1)
使用第二个可选参数将FoxPro日期字段包裹在DTOC函数中。这将返回标准的YYYY-MM-DD样式日期,无论区域设置如何。
SELECT DTOC(dDate) as dDate FROM Alias
如果这不可行,您需要调查函数以在FoxPro中显式设置区域设置,例如直观命名的SYS(3005)。
如果即使这样做不可行,您还需要求助于国外的服务器将其区域设置标准化为操作系统级别。
答案 2 :(得分:0)
可能在您的查询中明确并处理在Web应用程序中重建日期。因此,如果您在VFP中有一个名为MyDate的日期类型字段,请执行以下操作:
select x, y, z, day(MyDate) as daynum, month(MyDate) as monthnum, ;
year(MyDate) as yearnum from mytable
好的,所以在另一个重建日期的工作更多,但至少它应该与位置无关。