Unicode 压缩实现

SQL Server 使用 Unicode 标准压缩方案(SCSU)算法的实现来压缩存储在行压缩或页面压缩对象中的 Unicode 值。 对于这些压缩对象,Unicode 压缩自动应用于 nchar(n) 字段和 nvarchar(n) 字段。 数据库引擎将 Unicode 数据存储为 2 个字节,而不考虑区域设置。 这称为 UCS-2 编码。 对于某些区域设置,在 SQL Server 中实现 SCSU 压缩最多可以节省 50% 的存储空间。

支持的数据类型

Unicode 压缩支持固定长度 nchar(n)nvarchar(n) 数据类型。 不压缩存储在行外或 nvarchar(max) 列中的数据值。

注释

即使 nvarchar(max) 数据存储在行中,也不支持 Unicode 压缩。 但是,此数据类型仍可从页面压缩中受益。

从早期版本的 SQL Server 升级

将 SQL Server 数据库升级到 SQL Server 2014 时,不会对任何数据库对象(压缩或未压缩)进行与 Unicode 压缩相关的更改。 升级数据库后,对象将受到影响,如下所示:

  • 如果未压缩该对象,则不会进行更改,并且该对象继续像以前一样正常运行。

  • 行或页面压缩的对象继续像以前一样正常运行。 未压缩的数据保持未压缩的形式,直到其值更新。

  • 插入到行压缩或页面压缩表中的新行,会使用 Unicode 压缩技术进行压缩。

    注释

    若要充分利用 Unicode 压缩的优势,必须使用页面或行压缩重新生成对象。

Unicode 压缩如何影响数据存储

当创建或重新生成索引,或当值在使用行压缩或页面压缩的表中发生变化时,仅当该索引或值的压缩大小小于当前大小时,才会以压缩形式存储。 这样可以防止表或索引中的行由于 Unicode 压缩而增大大小。

压缩所节省的存储空间取决于正在压缩的数据的特征和数据的区域设置。 下表列出了可为多个地区实现的空间节约。

地区 压缩百分比
英语 50%
德语 50%
印地语 50%
土耳其语 48%
越南语 39%
日语 15%

另请参阅

数据压缩
sp_estimate_data_compression_savings(Transact-SQL)
页面压缩实现
sys.dm_db_persisted_sku_features(Transact-SQL)