摘要 :在还原备份文件、对表执行跨数据库查询或将数据从SQL Server迁移到其他软件时,您可能会遇到排序规则问题。当数据库存储引擎无法读取排序规则设置时,就会出现此类问题。本文将介绍 SQL Server 中的排序规则问题及其解决方法。如果数据库文件已损坏,则可以使用本文推荐的 SQL 修复软件 Stellar Repair for SQL来修复损坏的文件。
SQL Server中的排序规则是指一组字符和字符编码规则,用于决定数据在服务器中如何存储和比较。换句话说,SQL Server中的排序规则指定了表示区域字符集中每个字符的位模式,并确定了组织和比较数据的规则。MS SQL中有超过5000种排序规则,这些规则因国家和地区的语言而异。
排序规则关联多种选项,例如区分大小写、区分重音、区分假名和区分宽度,以便将排序规则、大小写和重音敏感属性应用于数据库文件中的数据。您可以在四个级别应用排序规则:实例、数据库、列和查询。
如果您尝试比较、排序或联接具有不兼容或错误排序规则的列,则可能会遇到错误。例如,在对两个表执行查询时,可能会发生排序规则冲突,导致出现诸如"无法在等于计算中解决'
SQL_Latin1_General_CP1_CI_AS'和'Arabic_CI_AS'之间的排序规则冲突"之类的错误。有时,如果您应用了排序规则设置的SQL数据库已损坏,也可能发生排序规则冲突。本文将介绍如何修复MS SQL Server中的排序规则问题。
如何检查 SQL Server 数据库的排序规则设置?
可以运行以下命令来检查数据库的排序规则设置:
SELECT name, collation_name FROM sys.databases;

或者,可以使用 DATABASEPROPERTYEX 系统函数检查数据库级别的排序规则设置(参见以下示例)。
SELECT CONVERT (varchar(256), DATABASEPROPERTYEX('database15','collation'));
要检查列级别的排序规则设置,运行以下命令:
SELECT name, collation_name FROM sys.columns WHERE name = N'<插入字符数据类型列名>';
解决 MS SQL Server 中排序规则问题的方法
当查询中使用具有不同排序规则的两个数据库时,可能会出现排序规则冲突错误和问题。可以尝试以下方法来解决MS SQL中的排序规则问题。
方法1:更改整个数据库的排序规则
一些 SQL Server 用户确认,他们能够通过更改整个数据库的排序规则来解决排序规则问题。为数据库设置统一的排序规则有助于防止排序规则冲突错误。要更改数据库排序规则,必须拥有访问数据库的 ALTER 权限。
注意:当更改数据库排序规则时,系统表中的char、varchar和text列及其参数和用户定义数据类型也会更改为新的排序规则。如果在安装 MS SQL Server 时遇到服务器级排序规则问题,则可以尝试更改服务器排序规则。
以下是更改整个数据库排序规则的步骤:
- 在SQL Server Management Studio (SSMS)中,打开对象资源管理器,连接到SQL Server数据库引擎实例,展开该实例,然后展开"数据库"。
- 右键单击需要更改排序规则的数据库,然后选择"属性"。

3.在"属性"窗口中,单击"选项",然后单击下拉选项以选择排序规则。

4.选择排序规则,然后单"确定"。
或者,可以在ALTER DATABASE语句中使用COLLATE子句来更改数据库排序规则。方法如下:
USE master;
GO
ALTER DATABASE database15
COLLATE French_CI_AS ;
GO
注意:可以使用此方法来解决将数据库从一个服务器还原或迁移到另一个服务器时出现的排序规则相关问题。
方法2:更改特定列的排序规则
如果您在对两个表进行排序和比较时遇到排序规则问题,则可以简单地更改特定列的排序规则以匹配其他列的排序规则。为此,请运行以下命令:
ALTER TABLE Employ
ALTER COLUMN FirstName NVARCHAR(50) COLLATE French_CI_AS;
注意:此方法适用于包含较少表的小型数据库。
方法3:使用 COLLATE 子句
如果您想要一个不更改数据库/列排序规则的快速解决方案,则可以在查询中使用COLLATE子句。这样,查询中将应用一个通用的排序规则,有助于解决排序规则冲突。此方法仅使查询中的特定操作使用新的排序规则,而无需更改列或数据库的排序规则。方法如下:
SELECT *
FROM EmployA A
JOIN EmployB B
ON A.Name COLLATE Latin1_General_BIN = B.Name;
如果 SQL 数据库损坏怎么办?
用户也可能因SQL数据库存在不一致或损坏而遇到排序规则问题。在这种情况下,一个简单的解决方案是使用专业的SQL修复工具------ Stellar Repair for MS SQL,可以有效修复SQL数据库(NDF/MDF)文件。该工具能够精确恢复数据库中的排序规则、表、索引和其他对象。它支持4500种排序规则和5508个排序规则代码页。该工具甚至可以从损坏的数据库文件中恢复已删除的记录。此外,它还提供了为严重损坏的数据库文件选择数据库排序规则的选项。
总结
在还原或迁移SQL数据库,或对非Unicode数据类型执行操作(如联接)时,可能会发生排序规则冲突或问题。当服务器无法将排序规则值与默认/设置的排序规则匹配时,就会发生这些问题。可以遵循上述方法来解决这些问题。如果SQL数据库已损坏,可以使用 Stellar Repair for SQL来修复数据库。它可以帮助恢复数据库中的所有对象,包括非Unicode列的排序规则设置。