Sql server 在新服务器上与美国和英国约会的乐趣
我刚刚有幸将一个旧的ASP网站/SQL DB迁移到一个新的专用OVH服务器French-所有默认值都设置为US Eng 数据库已从SQL 2005移动到SQL 2012 web edition 64位 我在网站上看到了旧版本的日期格式,例如8/3/2016,而不是03/08/2016。即使在数据库中,它们存储为ISO日期2016-08-03等 我在ASP经典网站上以英国格式输入日期 e、 g 03/08/2016,并将其转换为SQL中的ISO格式2016-08-03,该SQL将传递给存储过程,该存储过程已在其顶部设置了DATEFORMAT YMD 如果我检查数据库中的表,它们都正确地存储为ISO日期 我已经确保数据库的所有SQL登录都选择了英式英语作为默认语言 如果我在选项下查看数据库属性,默认语言为英式英语 如果我在General->Language下查看服务器属性,它是English United States,但在Advanced->Default Language下,它是British English 日期被正确地存储为ISO,就好像我做了DATEDIFFDAY,Stamp,GETDATE=0我可以看到所有记录,即使它们以美国格式8/3/2016出现在网站上,为什么我们的日期前面没有零我不知道 ASP代码没有改变,或者DB代码刚刚被移植到这个新的专用服务器中,现在我遇到了这些问题。我确信我在很久以前就通过更改默认登录语言解决了类似的问题,但在这个框中似乎不起作用 由于使用Betfair API获取赛车数据的.NET应用程序将美国/英国的日期混淆,导致重复插入,因此我收到了大量主键/索引错误,例如Sql server 在新服务器上与美国和英国约会的乐趣,sql-server,date,asp-classic,iis-8,windows-server-2012,Sql Server,Date,Asp Classic,Iis 8,Windows Server 2012,我刚刚有幸将一个旧的ASP网站/SQL DB迁移到一个新的专用OVH服务器French-所有默认值都设置为US Eng 数据库已从SQL 2005移动到SQL 2012 web edition 64位 我在网站上看到了旧版本的日期格式,例如8/3/2016,而不是03/08/2016。即使在数据库中,它们存储为ISO日期2016-08-03等 我在ASP经典网站上以英国格式输入日期 e、 g 03/08/2016,并将其转换为SQL中的ISO格式2016-08-03,该SQL将传递给存储过程,该
EXEC dbo.usp_net_insert_betfair_market_selection @MarketID = 125932808, @SelectionID = 10593225, @Racedatetime = '2016-08-03 15:10:00', @MarketType = 'WIN', @HorseName = 'She Done Good';
违反主键约束“PK\u BETFAIR\u MARKET\u SELECTIONS”。无法在对象“dbo.BETFAIR\u MARKET\u SELECTIONS”中插入重复密钥。重复键值为719859,WIN,2016年3月8日下午3:10
但是,如果我复制那个EXEC语句并在查询分析器窗口中直接运行它,那么它运行时不会出现任何错误
我一直在用谷歌搜索我的头,我看到有人建议将此代码放在所有显示日期的ASP页面的顶部,以强制其以英国格式显示>
'*将服务器区域设置设置为UK
Session.LCID=2057
这在一些页面上起到了作用,但我以前从未这样做过
在一列中包含记录和日期的长列表的页面上,我将日期包装在SQL中的CONVERTvarchar、GETDATE和103中,并在页面上正确返回
但我很困惑,因为我从来没有在旧设置上这样做过,而且似乎必须更改某些设置才能在同一个框中的新服务器SQL和Web IIS 8上修复所有这些
我尝试过进入.NET网站的全球化,并将文化和UI文化改为英语。然而,这并不能解决所有问题
机器上的语言偏好设置为英语UK,尽管我不认为这会有什么不同
如果我在查询分析器中运行此代码,要么将RD放入框中,要么通过通过网络连接到机器的本地SQL控制台
选择名称、别名、日期格式
来自系统语言
兰吉德在哪里=
从master..sysconfigures中选择值
其中comment='默认语言'
在一个查询窗口中,远程桌面进入服务器,我返回
名称别名日期格式
英国dmy
询问:
因此,这似乎与ASP网站或.NET应用程序与服务器/数据库之间的连接有关。我错过了一些东西,或者需要更改,因为这些都在旧的WebServer->Database Server设置上运行良好
你能想到一些我忽略或需要做的事情,以确保日期显示为英国在网站上没有编辑每个ASP页面和SQL包含日期,因为我从来没有这样做,为旧的设置
提前感谢您的帮助 使用一个日期作为唯一标识符可以做到这一点,显然,使用正确的设置是可以的,但随后移动它并发出隆隆声。最好完全避免。服务器的系统区域设置是什么,IIS报告的内容是什么?日期不带格式存储。使用iso标准格式yyyy-mm-dd输入从asp3到sql server的日期。这就是为什么将日期存储在三个单独的列中——月、日、年——这是我在开玩笑的人——很常见的原因。这可能是一件痛苦的事情,但它也完全消除了类似这样的本地化问题。如果您阅读,我确实以ISO格式yyy-mm-dd在数据库中存储日期,当作为网站登录的用户运行时,SQL显示正确的日期,并使用DATEPARTday将其拆分为COL,racedate显示正确的值。所以它一定是网络方面的东西。就像我运行SQL语句按racedate DESC排序一样,我得到了正确的结果,但是如果我将列而不是按部分顺序包装在CONVERTvarchar,racedate,103中,我会得到完全不同的结果,例如 2015年的比赛,而不是昨天的比赛。