繁体   English   中英

将base 64字符串插入SQL Server数据库

[英]Insert base 64 string into SQL Server database

我从XML文件中获取了一个base 64字符串,我想将其插入到我的SQL Server数据库中。 哪个字段类型在我的数据库中有字段? VARBINARY(MAX)? 在插入数据库之前,是否必须将base 64字符串转换为另一种格式?

最好的祝福

如果您打算按原样存储Base64字符串,则可以使用VARCHAR数据类型。 Base64编码设计为仅使用7位ASCII字符。

但是,如果您希望以二进制格式存储数据,则需要使用VARBINARY数据类型并将Base64字符串转换为二进制。 您可以使用XQuery功能(从SQL Server 2005开始)轻松地将值转换为VARBINARY ,反之亦然。

将变量中的Base64值转换为VARBINARY

declare @str varchar(20);

set @str = '3qAAAA==';

select cast(N'' as xml).value('xs:base64Binary(sql:variable("@str"))', 'varbinary(20)');

将变量中的二进制值转换为Base64:

declare @bin varbinary(20);

set @bin = 0xDEA00000;

select cast(N'' as xml).value('xs:base64Binary(xs:hexBinary(sql:variable("@bin")))', 'varchar(20)');

源(以及更多示例): 从Base64转换为varbinary,反之亦然

由于它是一个字符串而一个字符串是一个字符串是一个字符串,你应该能够将它放入VARCHAR(x)VARCHAR(MAX)字段而不会有任何问题。

“大小” VARCHAR(x)有一个最大值。 长度为8000个字符,而VARCHAR(MAX)为2 GB(2 ** 31-1字节)。

值得指出的是,如果将varchar(x)varchar(max)与base64字符串一起使用,并且在任何WHERE子句中使用base64字符串进行查找,则应在列上使用区分大小写的排序规则,因为对于base64编码数据,情况很重要。

varbinary(MAX)将是最有效的存储介质(原始字节小于b64编码),但您必须从b64转换为原始字节。 如果要在获得时存储b64,只需使用varchar(max)。 真的取决于 - 如果你要将它直接反映到XML中,那么单独留下b64的处理就更少了。

您可以插入Base64编码字符串本身为VARCHAR列, 或者你可以在Base64编码字符串转换回byte[]数组和存储在VARBINARY列。

确定哪个选项最合适将取决于您随后需要对数据执行的操作。 如果你需要一个Base64字符串,那就保持这种方式(在VARCHAR列中); 如果需要byte[]数组,则转换它(并将其存储在VARBINARY列中)。

我总是建议你将图像存储在DB中并作为varbinary(max)存储在DB中,因为Varbinary是性能激励,与varchar(max)相比,它占用的内存非常少,但是对于现代数据库和存储,这可能不那么令人担忧。 如果你想存储byte [] go for varbinary(max)。如果你想存储base64字符串,我总是建议nvarchar(max)。 但是性能和尺寸总是很昂贵。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM