Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP ISO 8601格式和SQL Server-时区_Php_Sql Server 2008_Zend Framework_Datetime_Pdo - Fatal编程技术网

PHP ISO 8601格式和SQL Server-时区

PHP ISO 8601格式和SQL Server-时区,php,sql-server-2008,zend-framework,datetime,pdo,Php,Sql Server 2008,Zend Framework,Datetime,Pdo,尝试使用PHP通过函数以编程方式插入数据时 date('c') 它返回以下格式的日期 2011-12-20T19:01:03+11:00 但是,在插入SQL Server数据库时,这不适合。它将返回错误 从字符串转换日期和/或时间时转换失败 现在当然有很多方法可以解决这个问题。插入数据时可以很容易地检查和更改格式,并指定yyyy-mm-dd-hh:mm:ss(不准确)。然而,我更愿意使用日期('c')格式,并依靠该调用来处理我的问题 我正在使用PDO和Zend_DB连接到数据库 有什么建议吗

尝试使用PHP通过函数以编程方式插入数据时

date('c')
它返回以下格式的日期

2011-12-20T19:01:03+11:00
但是,在插入SQL Server数据库时,这不适合。它将返回错误

从字符串转换日期和/或时间时转换失败

现在当然有很多方法可以解决这个问题。插入数据时可以很容易地检查和更改格式,并指定yyyy-mm-dd-hh:mm:ss(不准确)。然而,我更愿意使用日期('c')格式,并依靠该调用来处理我的问题

我正在使用PDO和Zend_DB连接到数据库


有什么建议吗?

用于存储日期的字段类型是什么?它在datetime不起作用

快速测试:

-- shows error
CREATE TABLE #tmp1 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt1 datetime
)
GO

INSERT INTO #tmp1 (
    c1,
    dto1,
    dt1
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp1

DROP TABLE #tmp1
GO

-- works - datetime2
CREATE TABLE #tmp2 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt2 datetime2
)
GO

INSERT INTO #tmp2 (
    c1,
    dto1,
    dt2
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp2

DROP TABLE #tmp2
GO

您用于存储日期的字段类型是什么?它在datetime不起作用

快速测试:

-- shows error
CREATE TABLE #tmp1 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt1 datetime
)
GO

INSERT INTO #tmp1 (
    c1,
    dto1,
    dt1
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp1

DROP TABLE #tmp1
GO

-- works - datetime2
CREATE TABLE #tmp2 (
    c1 varchar(30),
    dto1 datetimeoffset,
    dt2 datetime2
)
GO

INSERT INTO #tmp2 (
    c1,
    dto1,
    dt2
) VALUES (
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00',
    '2011-12-20T19:01:03+11:00'
)
GO

SELECT * FROM #tmp2

DROP TABLE #tmp2
GO

我在MySQL中使用date('c')没有任何问题。您使用的是哪个数据库?实际上是SQL Server 2008数据库。在这一点上,MySQL工作起来很有魅力。我在MySQL中使用date('c')没有任何问题。您使用的是哪个数据库?实际上是SQL Server 2008数据库。在这一点上,MySQL工作起来很有魅力。谢谢你,BartekR,这对我很有用。直到现在我才知道datetime2的数据类型。谢谢你,BartekR,这对我很有用。直到现在我才知道datetime2数据类型。