将数据库恢复到不同的排序规则

Posted

技术标签:

【中文标题】将数据库恢复到不同的排序规则【英文标题】:restore the database to a different collation 【发布时间】:2015-12-13 02:46:31 【问题描述】:

我试图找到如何。

例如:

服务器排序规则是 Czech_CI_AS 我备份的数据库有一个排序规则 Czech_CI_AS。 我需要恢复数据库的备份,但使用 排序规则 SQL_Latin1_General_CP437_CI_AI。

我哪里做错了,你能帮帮我吗?

【问题讨论】:

您确实需要提供代码,提供您遇到的错误或结果。请阅读How to Ask 感谢您的警告。改进.. 【参考方案1】:

正如您所发现的,原始数据库的排序规则保存在备份中,因此当您在其他地方从该备份创建新数据库时,原始排序规则随之而来。还原命令中没有选项可以在还原期间更改排序规则。

您可以在恢复数据库后将 DATABASE 更改为不同的排序规则,但请注意,这不会更改 所有 数据库中现有对象的排序规则,您需要更改排序规则各个表中的列数。

见MSDN:

当您更改数据库排序规则时,您会更改以下内容:

系统表中的任何 char、varchar、text、nchar、nvarchar 或 ntext 列都会更改为新的排序规则。

所有现有的 char、varchar、text、nchar、nvarchar 或 ntext 参数以及存储过程的标量返回值和 用户定义的函数更改为新的排序规则。

char、varchar、text、nchar、nvarchar 或 ntext 系统数据类型,以及基于这些系统数据的所有用户定义数据类型 类型,更改为新的默认排序规则。

您可以更改在 a 中创建的任何新对象的排序规则 使用 ALTER DATABASE 的 COLLATE 子句的用户数据库 陈述。此语句不会更改列的排序规则 在任何现有的用户定义表中。这些可以通过使用 ALTER TABLE 的 COLLATE 子句。

【讨论】:

排序规则存储在实例、数据库和列级别,而不是表。您必须单独更改每个基于文本的列 - 请参阅 this related SO question 以获取为您生成更改语句的脚本。 感谢您的宝贵时间!

以上是关于将数据库恢复到不同的排序规则的主要内容,如果未能解决你的问题,请参考以下文章

恢复数据库时找不到排序规则

角度材料表保存和恢复排序顺序到本地/会话存储

在 Postgres 上更改排序规则(保持编码)是不是安全?

将备份恢复到不同的服务器 - 用户权限

Rman将数据文件恢复到不同的路径

iptables规则备份和恢复