将数据库表从danish_norwegian_ci_ai更改为danish_norwegian_ci_as有什么后果?

时间:2019-08-23 09:00:06

标签: sql sql-server collation

我在连接同一数据库中的表时遇到了麻烦,因为某些原因,某些列属于归类Danish_Norwegian_CI_AS,而某些列则属于Danish_Norwegian_CI_AI。大多数是Danish_Norwegian_CI_AS,这也是数据库指定的排序规则。

我想更改这些表的排序规则,以使它们全部都是Danish_Norwegian_CI_AS,但我不知道应该从哪里开始了解进行此更改的后果。例如,某些字符会被误译吗?

我试图了解排序规则之间的差异,但是找不到很多。我知道差异与上升敏感性有关。

我希望所有表,列等都应归类为Danish_Norwegian_CI_AS

2 个答案:

答案 0 :(得分:2)

AS和AI之间的区别在于,排序顺序(或搜索等)可以看到带有(或不带有)带有重音符号的字母之间的区别,例如

-- This query would result in 'different', as it uses an accent sensitive collation
SELECT CASE
   WHEN 'ö' COLLATE Latin1_General_CI_AS = 'o' COLLATE Latin1_General_CI_AS
   THEN 'same'
   ELSE 'different'
END

-- This query would result in 'same', as it uses an accent insensitive collation
SELECT CASE
   WHEN 'ö' COLLATE Latin1_General_CI_AI = 'o' COLLATE Latin1_General_CI_AI
   THEN 'same'
   ELSE 'different'
END

CS和CI相似,表示区分大小写的矿石或不区分大小写的

通常可以在表甚至列中使用其他排序规则,但是我从来没有想到这是一个好主意,尤其是。当您使用字符字段(例如

)链接表时
SELECT
   p.Matchcode,
   p.Name,
   i.Ammount
FROM
   Persons p
   INNER JOIN Invoices i ON i.Matchcode = p.Matchcode

当两个表(或两个表中的Matchcode列)使用不同的排序规则时,这可能会导致意外(错误)结果。

如果您需要在特定查询中使用其他排序规则,则最好在查询中添加排序规则,例如

SELECT
   Lastname COLLATE Latin1_General_CS_AS AS Lastname,
   Firstname COLLATE Latin1_General_CS_AS AS Firstname
FROM
   Persons

答案 1 :(得分:0)