Sql Server 2008 - 归类类型之间的差异

时间:2009-02-10 08:16:23

标签: sql-server sql-server-2008 collation

我正在安装新的SQL Server 2008服务器,并且在获取有关不同排序规则的任何可用信息时遇到一些问题。我搜索过SQL Server BOL并谷歌搜索答案,但似乎无法找到任何有用的信息。

  1. Windows排序规则"Finnish_Swedish_100""Finnish_Swedish"之间有什么区别?

    我认为"_100" - 版本是SQL Server 2008中的更新排序规则,但如果是这种情况,那么旧版本的内容会发生什么变化?

  2. 启用"Accent-sensitive"通常是件好事吗?我知道这取决于任务和所有这些,但有任何众所周知的利弊需要考虑吗?

  3. "Binary""Binary-code point"参数,在哪些情况下应启用这些参数?

7 个答案:

答案 0 :(得分:4)

字母ÅÄÖ/åäö只是通过将整理设置为AI(Accent Insensitive)而不会与A和O混淆。然而,对于â和其他“组合”而言,这不是瑞典字母表中作为单个字母的一部分。 â将根据相关设置混合或不混合。

由于我有很多旧的数据库,我仍然需要与之交流,也使用链接服务器,我选择FINNISH _SWEDISH _CI _AS现在我正在安装SQL2008。当Windows排序规则首次出现在SQL Server中时,这是FINNISH _SWEDISH的默认设置。

答案 1 :(得分:3)

_100表示​​SQL Server 2008中的新排序规则,_90的排序顺序是2005年,没有后缀的排序顺序是2000.我不知道有什么不同,也找不到任何文档。除非您正在对另一个不同版本的SQL服务器进行链接服务器查询,否则我很想使用_100。对不起,我无法解决这些差异。

答案 2 :(得分:3)

使用以下查询自行试用。

如您所见,å,ä等不计入重音字符,并且在使用芬兰语/瑞典语校对时按照瑞典字母排序。

但是,只有在使用AS排序规则时才会考虑重音。对于AI排序规则,它们的顺序不变,就好像根本没有重音一样。

CREATE TABLE #Test (
    Number int identity,
    Value nvarchar(20) NOT NULL
);
GO

INSERT INTO #Test VALUES ('àá');
INSERT INTO #Test VALUES ('áa');
INSERT INTO #Test VALUES ('aa');
INSERT INTO #Test VALUES ('aà');

INSERT INTO #Test VALUES ('áb');
INSERT INTO #Test VALUES ('ab');

-- w is considered an accented version of v
INSERT INTO #Test VALUES ('wa');
INSERT INTO #Test VALUES ('va');
INSERT INTO #Test VALUES ('zz');
INSERT INTO #Test VALUES ('åä');
GO

SELECT Number, Value FROM #Test ORDER BY Value COLLATE Finnish_Swedish_CI_AS;
SELECT Number, Value FROM #Test ORDER BY Value COLLATE Finnish_Swedish_CI_AI;
GO

DROP TABLE #Test;
GO

答案 3 :(得分:2)

要解决问题3(从MSDN取出的信息;用他们的措辞,格式化我的):

二进制(_BIN):

  • 根据为每个字符定义的位模式对SQL Server表中的数据进行排序和比较。
  • 二进制排序顺序区分大小写并且区分重音。
  • Binary也是最快的排序顺序。
  • 如果未选择此选项,SQL Server将遵循相关语言或字母表的词典中定义的排序和比较规则。

二进制代码点(_BIN2):

  • 对于Unicode数据:根据Unicode代码点对SQL Server表中的数据进行排序和比较。
  • 对于非Unicode数据:将使用与二进制排序相同的比较。

使用二进制代码点排序顺序的优点是没有数据求助 在比较已排序的SQL Server数据的应用程序中需要因此,二进制代码点排序顺序可以提供更简单的应用程序开发和可能的性能提升。

有关详细信息,请参阅Guidelines for Using BIN and BIN2 Collations

答案 4 :(得分:0)

解决你的问题1.口音敏感是芬兰语 - 瑞典语的好处。否则,您的“å”和“ä”将被分类为“a”,“ö”将被分类为“o”。 (假设你将使用那种国际角色)。

更多信息:http://msdn.microsoft.com/en-us/library/ms143515.aspx(讨论二进制代码点和重音敏感度)

答案 5 :(得分:0)

解决问题2:

是的,如果口音是给定语言所需的语法。

答案 6 :(得分:0)

关于问题2和3

如果您接受用户数据,我建议关闭重音灵敏度,如果您有干净,消毒的数据,则建议关闭。 我自己不是芬兰人,我不知道有多少单词取决于他们所拥有的óôõ或ö。但是,如果有用户输入数据,您可以确保它们的使用不一致,并且您希望能够匹配它们。 如果您从数据集中收集知道其内容的数据,并了解其一致性,那么您将需要打开Accent Sensitivity,因为您知道这些差异是有目的的。

同样的问题在考虑问题3时也适用。(我主要是从Tomalak提供的链接中得到这个)如果数据是大小写和重音敏感的,那么你想要_BIN,因为它会更快排序。如果数据是不规则的,而不是大小写/重音敏感,那么您将需要_BIN2,因为它是为Unicode数据设计的。