由于网络带宽和性能等各种原因,我们有一个应用程序,其中大型Unicode字符串被转换为使用.Net Core 3.1的GZipStream .Net框架功能压缩的字节数组。
我们希望将它们存储在SQL Server 2017的
我们还想利用T-SQL
虽然
我们希望将它们存储在SQL Server 2017的
varbinary(max)
列中,以便以后检索和解压缩 - 使用相同的GZipStream库进行解压缩可以正常工作。我们还想利用T-SQL
Decompress
函数,能够在DB服务器上查询数据(而无需将其全部带回到.Net并在那里解压缩)。虽然
Decompress 似乎有效(即它不会抛出错误并且产生可转换为nvarchar(max)
的二进制输出),但生成的nvarchar与原始源完全不同-实际上显示时会导致SSMS崩溃!
如果我们将解压缩的字符串传递到 SQL Server 并在那里使用Compress
函数进行压缩,这不是一个问题,但我们不想这样做,因为它需要额外的解压缩步骤和额外的带宽消耗。
我已经确保我们使用的是 SQL Server 2017 的 CU20 补丁,因此我认为这不是一个修补程序问题。
我已经尝试使用 .Net 库中的不同压缩比选项,但它们都产生了相同的问题。
尽管 T-SQL 和 .Net 压缩算法都是 GZip 压缩,但似乎它们并不兼容,但如果有人成功地将两者结合起来,请告诉我。