我将字符串值保存为GZIP
到SQL Server 2016 VARCHAR(max)
列。
使用C#将字符串转换为GZIP
形式。
示例值
This is my trial string
产生的GZIP值
FwAAAB+LCAAAAAAABAALycgsVgCi3EqFkqLMxByFYiCVlw4AJnX75BcAAAA=
是否可以从SQL Server中解压缩选择此值?
或者我必须在C#应用程序中解压缩它吗?
我尝试过以下功能,但失败了。也被视为NVARCHAR(max)
我使用的gzip功能
public static string GZip_String(string text)
{
using (var memoryStream = new MemoryStream())
{
byte[] buffer = Encoding.UTF8.GetBytes(text);
using (var gZipStream = new GZipStream(memoryStream, System.IO.Compression.CompressionMode.Compress, true))
{
gZipStream.Write(buffer, 0, buffer.Length);
}
memoryStream.Position = 0;
var compressedData = new byte[memoryStream.Length];
memoryStream.Read(compressedData, 0, compressedData.Length);
var gZipBuffer = new byte[compressedData.Length + 4];
Buffer.BlockCopy(compressedData, 0, gZipBuffer, 4, compressedData.Length);
Buffer.BlockCopy(BitConverter.GetBytes(buffer.Length), 0, gZipBuffer, 0, 4);
return Convert.ToBase64String(gZipBuffer);
}
}
答案 0 :(得分:2)
解压缩功能对二进制数据起作用,因此您可以尝试将字节存储在varbinary字段中。以下是它在纯SQL中的工作原理(没有尝试过C#):
CREATE TABLE #tmp
(
F1 varchar(100)
, F2 varbinary(MAX)
);
INSERT INTO #tmp
(
F1
, F2
)
VALUES
('Hey there.' -- F1 - varchar(100)
, COMPRESS('Hey there.') -- F2 - varbinary(max)
);
SELECT F1
, F2
, CAST(DECOMPRESS(F2) AS varchar(100))
FROM #tmp;
答案 1 :(得分:0)
表中“压缩”字段的数据类型可能无效,应将其更改为varbinary(MAX)。 当您使用Compress函数时,错误的字段类型不会引起异常(例如nvarchar(MAX)),但是当您要使用decompress函数时,它将导致此错误。
您只需更改字段的数据类型并重新运行查询即可。