我从XML文件中获取了一个base 64字符串,我希望将其插入到我的SQL Server数据库中。哪个字段类型在我的数据库中有字段? VARBINARY(MAX)?在插入数据库之前,是否必须将base 64字符串转换为另一种格式?
祝你好运
答案 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)。但是性能和尺寸总是很昂贵。