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

What are the consequences of changing database tables from danish_norwegian_ci_ai to danish_norwegian_ci_as?

我在连接同一个数据库中的表时遇到问题,因为出于某种原因,有些列的排序规则是 Danish_Norwegian_CI_AS,有些是 Danish_Norwegian_CI_AI。大多数是 Danish_Norwegian_CI_AS,这也是数据库的指定排序规则。

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

我试图了解排序规则之间的差异,但找不到太多。我知道这个差异与上升灵敏度有关。

我希望所有表、列等都经过整理 Danish_Norwegian_CI_AS

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类似,都是区分大小写或者不区分大小写。

通常可以在 table 甚至列中使用不同的排序规则,但我从来不认为这是一个好主意,尤其是。当您 link table 使用字符字段时,例如

SELECT
   p.Matchcode,
   p.Name,
   i.Ammount
FROM
   Persons p
   INNER JOIN Invoices i ON i.Matchcode = p.Matchcode

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

如果您在特定查询中需要不同的排序规则,最好在查询中添加排序规则,例如

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

Understanding COLLATE DATABASE_DEFAULT