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

时间:2009-12-22 09:45:02

标签: c# sql-server database tsql base64

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

祝你好运

6 个答案:

答案 0 :(得分:12)

如果您打算按原样存储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)');

来源(以及更多示例):Converting from Base64 to varbinary and vice versa

答案 1 :(得分:9)

由于它是一个字符串而一个字符串是一个字符串,所以你应该可以将它放入VARCHAR(x)VARCHAR(MAX)字段而不会出现任何问题。

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

答案 2 :(得分:4)

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

答案 3 :(得分:1)

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

答案 4 :(得分:1)

您可以将Base64字符串本身插入VARCHAR列,您可以将Base64字符串转换回byte[]数组并将其存储在{{ 1}}列。

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

答案 5 :(得分:0)

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