Unicode 压缩的实现

SQL Server 使用 Unicode 标准压缩方案 (Standard Compression Scheme for 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 2012 时,将不会对任何数据库对象(无论是压缩的还是未压缩的)进行与 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)

概念

数据压缩

页压缩的实现