Windows 排序规则和 SQL 排序规则有多大差异呢?

解决方案 »

  1.   

    (1)Windows 排序规则     Windows 排序规则是为 SQL Server 定义的排序规则,用来支持 Windows 区域设置。有关这些排序规则的列表,请参阅安装程序中的排序规则设置。将 Windows 排序规则指定给 SQL Server 后,SQL Server 实例使用的代码页、排序规则和比较规则,将和指定了相关的 Windows 区域设置的计算机上所运行的应用程序使用的相同。例如,SQL Server 的法语 Windows 排序规则与 Windows 法语区域设置的排序规则属性相对应。    Windows 区域设置的数量比 SQL Server Windows 排序规则多。Windows 区域设置名称是基于语言和地域的。例如,法语(加拿大)。不过,若干种语言可以共享通用的字母表和规则进行字符的排序和比较。例如,33 个 Windows 区域设置(包括所有葡萄牙语和英语 Windows 区域设置)使用 Latin1 代码页 (1252) 并遵循一组公用的字符排序和比较规则。SQL Server Windows 排序规则基于 Latin1_General 代码页和排序规则,支持所有 33 种 Windows 区域设置。     另外,Windows 区域设置还指定 SQL Server Windows 排序规则不具有的属性,如货币、日期和时间格式。因为不同的国家和地区(比如英国和美国)使用不同的货币、日期和时间格式,因此它们需要不同的 Windows 排序规则。但由于它们使用相同的字母表和规则来对字符进行排序和比较,因而可以使用相同的 SQL Server 排序规则。    在 SQL Server 中,Windows 排序规则与一系列后缀相组合,这样可以额外定义区分大小写、重音、假名和全半角的排序规则和比较规则。有关这些后缀的详细信息,请参阅 Windows 排序规则排序样式。 (2)SQL 排序规则     SQL 排序规则是一种兼容性选项,用来匹配 SQL Server 早期版本所指定的代码页号和排序顺序的公用组合属性。许多排序规则都支持通过后缀指定区分大小写、重音、假名、全半角,但不全是这样。有关详细信息,请参阅使用 SQL 排序规则。     在 SQL Server 2005 中,应优先采用 Windows 排序规则。特别是在数据库中 Unicode 列与非 Unicode 列都存在时。Windows 排序规则实际上对 Unicode 数据和非 Unicode 数据都应用了基于 Unicode 的排序规则。这表示 SQL Server 在内部将非 Unicode 数据转化为 Unicode 来执行比较操作。这保证了 SQL Server 中所有数据类型的一致性,也使开发人员能够使用 SQL Server 中的排序规则来对字符串进行排序。     另一方面,对 Unicode 数据使用相应的 Windows 排序规则后,SQL 排序规则可以对非 Unicode 数据应用非 Unicode 排序规则,对 Unicode 数据应用 Unicode 排序规则。这一差异可能导致对相同字符的比较得到不一致的结果。因此,如果您的数据库中既有 Unicode 列,又有非 Unicode 列,应将它们都定义为使用 Windows 排序规则,这样可以对 Unicode 和非 Unicode 数据使用相同的排序规则。    只有为了保持与 SQL Server 早期版本的现有实例的兼容性,或者为了保持与使用 SQL Server 早期版本的 SQL 排序规则开发的应用程序的兼容性,才应使用 SQL 排序规则。    Windows 排序规则与 SQL 排序规则在性能上可能存在着差异。