24

最初,我在本地计算机上创建了我的 SQL Server 数据库。我将其排序规则设置为Latin1_General_CI_AI,一切正常。当我将完成的工作移到托管 SQL Server 的 Web 上时,我遇到了问题:他们使用不同的数据库排序规则。那我现在能做什么?

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

当我尝试更改数据库的排序规则时,服务器抱怨说我没有这样做的用户权限。我试图联系支持台,但没有成功。我可以帮助自己吗?

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

4

2 回答 2

32

更改数据库的排序规则

ALTER DATABASE MyDataBase COLLATE [NewCollation]

更改列的排序规则

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

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

于 2012-08-30T22:16:07.663 回答
3

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

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/collat​​ions/set-or-change-the-column-collat​​ion?view=sql-server-ver15

于 2020-07-12T12:59:38.073 回答