我希望在PDO-MSSQL连接上设置时区(每个会话),以便getdate()可用于存储和返回用户的本地时间,而不是服务器默认值(欧洲/伦敦)
Google 为 MYSQL 返回了数百个结果;但为 MSSQL 返回了任何结果。所以看起来这就是 MYSQL 的答案:
$PDO->setAttribute(PDO::MYSQL_ATTR_INIT_COMMAND=>"SET time_zone = 'Europe/London'
MSSQL 有等效项吗?
谢谢
克里斯
Microsoft SQLServer没有会话时区的概念,因此您的问题的答案很简单 - 否。
但是,有一些解决方案可用于在 SQL Server 中使用时区。 在SQL Server 2016中,增加了对AT TIME ZONE
的支持,因此可以在时区之间转换数据元素(类似于MySQL的CONVERT_TZ
函数)。 但这使用Microsoft Windows时区标识符,而不是标准的IANA/TZDB标识符。 如果你想要支持这些(例如你提到的Europe/London
),那么你需要使用类似于我的SQL Server 时区支持开源项目的东西。
仅当您确实需要在数据库层进行时区转换时,才需要这两种方法中的任何一种。 在绝大多数情况下,您实际上并不需要这样做。 相反,请在应用程序层处理时区转换。 PHP 对时区有非常好的支持,所以你不需要在数据库中这样做。
如果您有一个特定的场景,那么问一个新问题(在搜索以查看它是否已经被问过之后)。