预计在开发和生产SQL Server之间有不同的排序规则会出现什么问题?

时间:2010-10-26 05:13:18

标签: sql-server deployment configuration development-environment collation

断言"Unable to update sys.columns - any other approach?"含糊地提到使用不同的排序规则部署到服务器的问题。

问题是默认情况下,Windows区域和语言选项确定SQL Server排序规则(在设置过程中) - >高级 - > “在控制面板中选择一种语言以匹配您要使用的非Unicode程序的语言版本”。

因此,开发和生产/客户端SQL Server之间的排序差异是很常见的情况 例如,但仅举例来说,我在本地SQL Server中使用来自Windows的Cyrillic_General_CI_AS排序规则,并且我的客户端具有希伯来语排序规则的服务器。

那么,开发人员预计必须通过一次整理来开发哪些问题/问题,有时甚至可能不知道客户端/客户在SQL Server上使用哪种排序规则?

更新:

让我们说典型的情况是我不从头开发数据库或在客户端安装生产SQL Server。典型情况是我在共享或专用服务器上连接/部署到SQL Server和/或接收数据库备份。

UPDATE2:
@ u07ch,
我的开发机器运行在en-us Windows XP Pro SP3(英语)和en-us SQL Server(英文版)上 Plz从SQL Server的默认排序规则来看我的问题(“选择一种语言来匹配你想要使用的非Unicode程序的语言版本”)。

我无法理解“永远不会使用临时表或任何其他使用TEMPd的表” TempDB用于SQL Server中的大多数操作,甚至用于存储来自选择的中间结果。

@Damien_The_Unbeliever,
我不觉得CS_AS很尴尬。恕我直言。 CI-AI很难尴尬。

如果要编写脚本(手动或通过SSMS),那么我不可避免地会遭遇攻击 Collations are scripted either for all columns or for none

UPDATE3:
我的问题明确地说,并且我的更新重申,我无论如何都 NOT 使用任何西里尔文排序规则(甚至代码页),但由于SQL Server默认设置已链接,我的SQL Server和数据库将Cyrillic_General_CI_AS作为默认排序规则依赖Windows配置 根据这个理由,BTW很难解释或理解,但这只是SQL Server设置中的现状...... 但结果是,这种依赖性实际上确保了不同国家/地区的SQL Server的不同(默认)排序规则。这个问题的本质是什么......

2 个答案:

答案 0 :(得分:1)

如果您的客户已经没有希伯来语的SQL服务器并且您从头开始安装,那么在安装期间,DBA可以通过选择自定义安装选项来配置SQL Server排序规则。你最终会在2005/8年到达一个整理设计师标签。

如果它为时已晚,那么如果你从不使用临时表或任何使用TEMPdb的其他东西,或者你都是unicode,或者如果你有幸使用SQL逻辑,那么在运行时将所有的校对重新投入,那么我认为你赢了根本不用担心它。假设情况并非如此(因为它们在我们的数据库中),那么您将需要在SQL服务器上的本地排序规则中运行数据库,以避免排序规则冲突。为此,您需要使用排序规则设置获取SQL脚本并将其运行到新服务器中,以便它获取本地排序规则。

最后要担心的是,如果您需要将数据从客户端恢复到运行西里尔语的本地系统,您将需要希伯来校对服务器或DTS / SSIS从备份到本地校对的所有数据复制到您的办公室以运行数据。

答案 1 :(得分:0)

如果你知道你将要处理不同的校对,那么我听过的最好的建议是确保你正在开发的校对尽可能笨拙。所以我会改变你的开发设置,至少使用区分大小写,重音敏感的排序规则(CS_AS,而不是CI_AS)。

这样,您在代码中进行的任何与排序相关的假设都应该显示在开发中,而不是在发布到生产时。

我还要确保手动编写任何脚本(或者关闭SSMS中包含排序规则的脚本选项),并且任何生产版本都是通过脚本完成的,而不是通过脚本完成。导入/导出向导或通过还原数据库。这样,生产数据库应该具有最终用户所需的排序选项。