SQL Server排序规则选择

| 我今晚花了很多时间试图找到有关在我的SQL Server 2008 R2安装中应用哪种排序规则的指南,但是几乎所有在线内容都基本上说“选择适合您的内容”。极其无济于事。 我的背景是新的应用程序开发。我不必担心与SQL Server早期版本(即<= 2005)的向后兼容性。我对存储代表全球语言的数据非常感兴趣,而不仅仅是基于拉丁语的数据。我在网上发现的几乎没有什么帮助表明我应该避免所有\“ SQL_ \”排序规则。这将我的选择范围缩小为使用基于Windows区域设置的二进制或“非二进制”排序规则。 如果我使用二进制文件,那么我应该使用\“ BIN2。\”。所以这是我的问题。如何确定应使用BIN2还是仅使用“ Latin1_General_100_XX_XX_XX \”?我的蜘蛛侠告诉我,BIN2将提供“不太准确”的排序规则,但对所有语言而言,归类更为通用(而且速度更快!)。我也怀疑二进制排序规则区分大小写,区分重音和假名(是吗?)。相比之下,我怀疑非二进制排序规则最适合基于拉丁语的语言。 该文档不支持我的上述主张,我正在做出有根据的猜测。但这是问题!为什么在线文档如此之薄,以至于您只能凭空猜测呢?甚至《 SQL Server 2008 Internals》一书也讨论了各种选择,但没有说明为什么以及何时选择二进制排序规则(与非二进制Windows排序规则相比)。犯罪!!     
已邀请:
        “ SQL Server 2008 Internals”对主题imho进行了很好的讨论。 二进制排序规则比较棘手,如果您打算支持人类文本搜索,则最好使用非二进制排序。如果您已经调整了所有其他内容(首先是体系结构),并且在区分大小写和重音敏感度是期望的行为(例如密码散列)的情况下,Binary可以获得一点点性能。二进制排序规则实际上是“更精确的”,因为它不会考虑类似的文本。您从那里得到的排序顺序仅对机器有用。 SQL_ *归类和本机Windows归类之间只有细微的差别。如果您不受兼容性的限制,请选择本机,因为它们是前进的方向。 归类决定排序顺序和相等性。您可以选择最适合您的用户的东西。据了解,您将对数据使用unicode类型(如nvarchar)以支持国际文本。排序规则会影响可存储在非unicode列中的内容,然后不会影响您。 真正重要的是,避免在WHERE子句中混合排序规则,因为这是不使用索引而要支付的罚款。 Afaik没有支持所有语言的精打细算方法。您可以为大多数用户选择一个,也可以针对每种语言在不同的列中获得本地化支持。 重要的一件事是使服务器排序规则与数据库排序规则相同。如果计划使用临时表作为临时表(如果使用\“ CREATE TABLE #ttt ... \”创建)来拾取服务器排序规则,将会使工作变得更加轻松,并且会遇到排序规则冲突,您将需要通过指定显式排序规则来解决。这也会对性能产生影响。     
请不要认为我的回答是完整的,但是您应该考虑以下几点: (如#Anthony所说)所有文本字段都必须使用“ 0”数据类型。这将允许您存储任何语言的任何字符,如
UTF-8\\unicode
字符集所定义!如果不这样做,您将无法在表格中混合来自不同来源(拉丁文,西里尔文,阿拉伯文等)的文本。 也就是说,您的排序规则选择将主要影响以下内容: 排序顺序或在\'e \'和\'é\'或\'c \'和\'ç\'之类的字符之间设置的排序规则(应该将它们视为相等还是不相等?)。在某些情况下,整理序列的确会考虑特定的字母组合,就像在匈牙利语中一样,其中C和CS或D,DZ和DZS被独立考虑。 分析空格(或其他非字母字符)的方式:正确的“字母顺序”是哪一个? 这个(空格被认为是“'第一等级'”字符)?
San Juan
San Teodoro
Santa Barbara
还是这个(排序中不考虑空格)?
San Juan
Santa Barbara
San Teodoro
排序规则也会影响区分大小写:是否必须将大写字母视为与小写字母相似?     
        全局数据库(例如网站)的最佳默认排序规则可能是4分。比排序规则更重要的是确保所有文本列均使用“ 0”数据类型。     
        只要您使用NVARCHAR列(对于混合的国际数据,您应该使用),所有* _BIN和* _BIN2归类都将基于Unicode代码点执行相同的二进制比较/排序。选择哪一个都没关系。 Latin1_General_BIN2看起来是一个合理的通用选择。 来源:http://msdn.microsoft.com/en-us/library/ms143350(v=sql.105).aspx     

要回复问题请先登录注册