将Base64字符串插入SQL Server数据库

5

我从XML文件中获得了一个base64字符串,我想将其插入到我的SQL Server数据库中。我的数据库字段必须是什么类型?varbinary(MAX)?在插入数据库之前,我是否需要将base64字符串转换为另一种格式?

最好的问候

6个回答

17
如果你打算将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,反之亦然


9

由于它是一个字符串,并且字符串就是字符串,因此您应该可以将其放入VARCHAR(x)VARCHAR(MAX)字段中,而不会遇到任何问题。

"大小"为VARCHAR(x)的最大长度为8000个字符,而VARCHAR(MAX)的最大长度为2 GB(2 ** 31-1字节)。


3
你是说这是一个字符串吗?;) - Daniel Vassallo
2
我做了 - 你没听到吗?:D - marc_s

4
值得指出的是,如果您在使用base64字符串时使用varchar(x)varchar(max)并且您在任何WHERE子句中使用该base64字符串进行查找,则应在该列上使用区分大小写的排序规则,因为大小写对于base64编码的数据是有意义的。

1

varbinary(MAX)将是最有效的存储介质(原始字节比b64编码小),但您需要从b64转换为原始字节。如果要将b64存储为获取到的数据,请使用varchar(max)。这实际上取决于-如果您要将其直接放回XML,则保持b64不变会减少处理量。


1

您可以将Base64字符串本身插入到VARCHAR列中,或者将Base64字符串转换回byte[]数组并将其存储在VARBINARY列中。

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


0

我总是建议你将图片存储为 varbinary(max) 在数据库中,因为 Varbinary 是性能激励,与 varchar(max) 相比占用的内存非常少。但是随着现代数据库和存储技术的发展,这可能不再是一个问题。如果你想要存储 byte[],就选择 varbinary(max)。如果你想要存储 base64 字符串,我总是建议使用 nvarchar(max)。然而性能和大小总是会很昂贵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接