Mon*_*RPG 5 c# sql-server compression gzip
我将字符串值保存GZIP
到 SQL Server 2016VARCHAR(max)
列中。
将字符串转换为GZIP
形式是使用 C# 完成的。
示例值
This is my trial string
Run Code Online (Sandbox Code Playgroud)
生成的GZIP值
FwAAAB+LCAAAAAAABAALycgsVgCi3EqFkqLMxByFYiCVlw4AJnX75BcAAAA=
Run Code Online (Sandbox Code Playgroud)
是否可以选择从 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);
}
}
Run Code Online (Sandbox Code Playgroud)
解压缩函数适用于二进制数据,因此您可以尝试将字节存储在 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;
Run Code Online (Sandbox Code Playgroud)