1. 什么是SQL Server数据库校对技术?
在SQL Server里面,校对(collations)可以定义数据在比较、排序等方面的规则。SQL Server 数据库校对(Database Collation)技术就是为了解决数据在跨域或者域内传输的时候,因为校对顺序不一致出现乱码或者不兼容的问题。简单的说就是,如果你的数据库和应用都使用相同的校对集,那么就不会出现乱码之类的问题。
校对规则(collation):校对规则是指在排序、比较或隔离字符数据时所用的规则集,也是处理非 Unicode 数据时所使用的代码页、比较规则和 Windows 区域设置数据的集合。在 SQL Server 中,校对规则应用于多种数据类型,包括 char、varchar、text、nchar、nvarchar 和 ntext 数据类型。每种数据类型必须使用适当的校对规则。
2. SQL Server数据库校对技术的种类?
2.1 二进制校对(Binary Collations)
二进制校对是一种区分大小写的二进制排序顺序,它会将数据作为一长串 bit(位),然后按照比特的顺序进行排序。
举个例子:将非 ASCII 字符(如:?, ?)作为二进制进行排序。以字母 A 开始,第 1 个比特位设置为 1,表示未到达该字符的结束。紧挨着第 1 位的字符是 B,与 A 相似,所以第 2~10 位都为 0。在第 11 位中,该构造继续执行,因为在排序列表中不存在以 AB 起始的元素。当到达两个字母序列的公共点(在本例中为 AE)时,该构造仍然继续,因为 AE 之后仍存在其他字符。在 final position 上,比特位取反,并添加一个额外的比特位作为空闲位置。最后,各个字符都以此方式进行二进制排序。
2.2 词典校对(Dictionary Collations)
词典校对根据字符集中给定的排序顺序,以字母表顺序(从 A 到 Z,不区分大小写)对数据进行排序,对于国际化和多语种场景,建议使用以 _SC 为后缀的词典校对。
举个例子:其中一个存在词典校对集的字符集是 USING_WI, 根据 US_WI 词典校对分配排序顺序:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 。通常,设置词典排序可以提高查询和插入性能。
2.3 区分大小写校对(Case-Sensitive Collations)
区分大小写校对代表区分大小写排序,排序规则与二进制校对相同,但是会将大写字母和小写字母分开排序。
举个例子:使用 Latin1_General_CS_AS collation 来做一个快速测试。其中 CS 表示大小写敏感,AS 表示区分音标。
SELECT *
FROM T1
WHERE Col1 = 'NavigationBars' COLLATE Latin1_General_CS_AS
2.4 不区分大小写校对(Case-Insensitive Collations)
不区分大小写校对将所有数据统一转化为小写字母,然后再进行排序,这种校对适用于对大小写要求不高的场景,例如搜索等。
举个例子:例如选择 Latin1_General_CI_AS 校对:其中 CI 表示不区分大小写,AS 表示区分口音。
SELECT *
FROM Product
WHERE ProductName LIKE '%moms%'
COLLATE Latin1_General_CI_AS;
2.5 Unicode校对(Unicode Collations)
Unicode校对适用于 Unicode 数据,排序顺序与二进制校对不同,它们按照 Unicode 标准进行排序。这些校对分为不区分大小写和区分大小写两类。
举个例子:以下是几个以 _SC 为后缀的 Unicode 简单校对集:
Chinese_PRC_90_SC (中文)
Japanese_100_CS_AS_KS_WS_SC (日语)
Korean_90_CS_AS_SC (韩语)
Vietnamese_100_BIN_SC (越南语)
3. SQL Server校对的设置方式
1. SQL Server默认校对设置
SELECT DATABASEPROPERTYEX('master', 'Collation') AS [Database Collation];
2. 更改表上的默认列设置
ALTER DATABASE MyDatabase
COLLATE Latin1_General_CI_AI;
3. 更改表上的列设置
ALTER TABLE Person.Address
ALTER COLUMN AddressLine1 varchar(60)
COLLATE French_CI_AI;
注意:修改数据库校对集会导致所有字符数据类型的表、存储过程、视图、索引和临时表的数据类型和排序顺序都被更改。
4. SQL Server数据库校对技术的应用场景
应用场景1:数据库中数据需要导出到其他系统或者应用时,为了避免由于数据转移造成乱码或者无法识别的情况,需要保持数据库和外部系统使用相同的校对集。
应用场景2:在高并发的并发插入、更新操作中,数据库校对集的不同可能会导致索引分裂和性能损失等问题。
5. 总结
SQL Server 数据库校对技术可以避免因跨场景传输数据的字符集顺序不同导致的乱码或其他不兼容问题。SQL Server提供了五种校对集,二进制、词典、区分大小写、不区分大小写和Unicode校对。我们可以根据实际应用场景选择相应的数据库校对集。在修改数据库校对集时,需要注意修改会导致所有字符数据类型的表、存储过程、视图、索引和临时表的数据类型和排序顺序都被更改。