更改数据库排序规则的过程

Ton*_*kle 6 sql-server collation sql-server-2014 dbatools

我被要求更改已投入生产几年的数据库的排序规则,因为它在部署时设置不正确。

所以我的研究表明,为了改变所有列的排序规则,你必须放弃约束和其他什么,它看起来很快就会变得丑陋。所以我想只是编写所有对象的脚本,查找/替换对旧排序规则的所有引用,创建新数据库,然后使用 dbatools 复制数据:

Get-DbaDbTable -SqlInstance SourceServer -Database SourceDb |
 foreach-object 
    { Copy-DbaDbTableData -DestinationDatabase TargetDb -DestinationTable $_.Name }
Run Code Online (Sandbox Code Playgroud)

这是更改所有内容排序规则的有效方法吗?乍一看,它似乎运行得相当顺利(即,通过数据迁移没有错误)。

如果重要的话,从 SQL_Latin1_General_CP1_CI_AS 到 SQL_Latin1_General_CP437_CI_AI。

Sol*_*zky 8

嗯,它可能非常简单,也可能有很多复杂性。有很多限制可以防止更改数据库的默认排序规则

请参阅我的以下帖子,其中详细介绍了每个级别的整理会影响什么,以及您可能会遇到什么和需要注意的问题,以及如何处理这些事情:

更改所有用户数据库中的实例、数据库和所有列的排序规则:可能出现什么问题?

你的方法可能是完全有效的。如果它似乎有效,那么它可能确实有效。只需仔细阅读我帖子中的每个要点,以确保您已查看所有需要检查的地方。例如,您是否只是更改单个数据库的排序规则?如果是这样,实例级排序规则是什么?是你提到的两个之一吗?有可能是一些奇怪的行为,如果在数据库级别和实例级排序规则不匹配,但不一定。

只是出于好奇:您为什么要使用SQL_Latin1_General_CP437_CI_AI。似乎是一个潜在的奇怪选择。使用该数据库的应用程序是否真的需要代码页 437?这是 JIRA 的任何机会吗?我之所以这么问,是因为这是 JIRA 的两个“支持”排序规则之一,而且并不是经常有人想要使用该特定排序规则。如果是这种情况,那么您可能不需要进行此更改。关于这个问题,请在此处查看我对 Atlassian 的建议:

当 SQL Server 中的数据库和服务器/默认排序规则不匹配时,Jira 中的排序规则错误

长支持票短:Atlassian 首先提出“受支持的排序规则”,给他们自己和他们的客户带来了巨大的伤害。到目前为止,还没有证明为什么选择这两个,以及为什么不“支持”其他人。我 99.99999% 肯定这仅仅是他们的开发人员不理解排序规则(或 SQL Server 排序规则)的问题,这对他们的开发人员没有任何影响,因为 Jira 有点棒,只是大多数人不理解这些东西。我对他们的建议是他们支持以下内容:

安装 Jira 的数据库必须具有与实例级排序规则相同的不区分大小写的排序规则。

排序规则是否不区分重音取决于您以及您希望如何进行排序和比较。最后,只需确保实例和数据库具有相同的排序规则。(如果您要做所有这些工作只是为了将数据库更改为他们“支持”但与实例级排序规则不同的排序规则,那么您将通过尝试遵守他们的(很可能是不必要的)来破坏 Jira ) 规定的要求 ;-)

我的建议:不要改变任何东西!你甚至说:

已经投入生产几年的数据库

如果它已经投入生产多年而没有遇到问题,那么可能没有问题:-)