我在连接同一数据库中的表时遇到了麻烦,因为某些原因,某些列属于归类Danish_Norwegian_CI_AS,而某些列则属于Danish_Norwegian_CI_AI。大多数是Danish_Norwegian_CI_AS,这也是数据库指定的排序规则。
我想更改这些表的排序规则,以使它们全部都是Danish_Norwegian_CI_AS,但我不知道应该从哪里开始了解进行此更改的后果。例如,某些字符会被误译吗?
我试图了解排序规则之间的差异,但是找不到很多。我知道差异与上升敏感性有关。
我希望所有表,列等都应归类为Danish_Norwegian_CI_AS
答案 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)