我在Windows2012 R2生产服务器上预装了一个MS 2012实例。Windows为英语(EN-US),Server排序规则为SQL_Latin1_General_CP1_CI_AS。该系统使用nvarchar字段处理所有中文数据。
稍后,由于某些原因(与sql server无关),我可能不得不将Windows2012 R2服务器的默认系统区域设置更改为中文。这会不会对SQL服务器实例造成任何不理想的副作用?
发布于 2017-11-26 04:25:24
一般来说你应该没事的。我所知道的唯一可能受到影响的领域是SQLCLR,在这种情况下,必须满足以下条件:
SqlString被用作输入参数类型。SqlString参数正在与string内联连接,同时不使用Value属性或ToString()方法(即"some string" + SqlStringInputParam;)。Regex。要明确的是,此问题涉及加载程序集的数据库的默认排序规则,而不是实例/服务器级别的排序规则,甚至也不涉及任何字符串列或任何字符串文本或变量的排序规则,这些排序规则都是通过COLLATE关键字设置的。
如果数据库的默认排序规则是SQL_Latin1_General_CP1_CI_AS,因为这就是实例级排序规则,那么上面的#1和#2都不是真的。在这种情况下,如果数据库中有任何与上面第4-6项匹配的SQLCLR代码,那么您就不会看到任何问题。但是,更改OS的区域设置将使上面的第1项变为真,在这种情况下,如果有任何SQLCLR代码与上面第4-6项相匹配,那么该代码将开始抛出“排序不匹配”异常。
诚然,遇到这种情况的可能性相当低。但是,它已经发生了,所以最好是意识到这一点。
发布于 2017-11-25 18:45:18
如果更改Windows,Server安装将不会发生任何变化,因为它是用特定的排序规则SQL_Latin1_General_CP1_CI_AS安装的。
https://dba.stackexchange.com/questions/191654
复制相似问题