如何使用SQL设置列的排序规则?

时间:2012-08-30 21:35:01

标签: sql sql-server collation

最初,我在本地计算机上创建了SQL Server数据库。我将其整理设置为Latin1_General_CI_AI,一切运作良好。当我将完成的工作移动到托管SQL Server的Web时,我遇到了问题:它们使用不同的数据库排序规则。那我现在该怎么办?

更具体地说,我需要Latin1_General_CI_AI,但他们有Czech_CI_AS。在比较捷克语中的字符串时,这两者差别很大(令人惊讶的是我需要latin1 general,而不是捷克语才能得到正确的结果。)

当我尝试更改数据库的排序规则时,服务器抱怨说我没有用户权限来执行此操作。我试图联系支持台,但没有运气。我可以自救吗?

我知道可能每个单独的表列都有自己的排序规则,所以我应该将所有字符串列设置为Latin1_CI_AI。但我不知道该怎么做。我只有SQL访问数据库(不幸的是没有SQL Server Management Studio)。

2 个答案:

答案 0 :(得分:20)

更改数据库的排序规则

ALTER DATABASE MyDataBase COLLATE [NewCollation]

更改列的排序规则

ALTER TABLE MyTable ALTER COLUMN Column1 [TYPE] COLLATE [NewCollation]

但是,如果可以执行此操作,则存在许多限制,非常值得注意的是,如果在任何索引中使用该列,则会被拒绝。
在某些情况下,您可以在SSMS中完成更多工作 语法文档列出了限制:

答案 1 :(得分:1)

我尝试了这段代码,并且对我有用:

ALTER TABLE dbo.MyTable 
ALTER COLUMN CharCol VARCHAR(50) COLLATE Latin1_General_100_CI_AI_SC_UTF8

引用:https://docs.microsoft.com/en-us/sql/relational-databases/collations/set-or-change-the-column-collation?view=sql-server-ver15