我从XML文件中获得了一个base64字符串,我想将其插入到我的SQL Server数据库中。我的数据库字段必须是什么类型?varbinary(MAX)?在插入数据库之前,我是否需要将base64字符串转换为另一种格式?
最好的问候
我从XML文件中获得了一个base64字符串,我想将其插入到我的SQL Server数据库中。我的数据库字段必须是什么类型?varbinary(MAX)?在插入数据库之前,我是否需要将base64字符串转换为另一种格式?
最好的问候
VARCHAR
数据类型。Base64编码被设计为仅使用7位ASCII字符。VARBINARY
数据类型并将Base64字符串转换为二进制格式。你可以使用XQuery功能(SQL Server 2005及以上版本)轻松地将值转换为VARBINARY
以及反向转换。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)
并且您在任何WHERE
子句中使用该base64字符串进行查找,则应在该列上使用区分大小写的排序规则,因为大小写对于base64编码的数据是有意义的。varbinary(MAX)将是最有效的存储介质(原始字节比b64编码小),但您需要从b64转换为原始字节。如果要将b64存储为获取到的数据,请使用varchar(max)。这实际上取决于-如果您要将其直接放回XML,则保持b64不变会减少处理量。
您可以将Base64字符串本身插入到VARCHAR
列中,或者将Base64字符串转换回byte[]
数组并将其存储在VARBINARY
列中。
决定哪个选项最合适取决于您随后需要对数据执行的操作。如果您需要一个Base64字符串,则保持原样(在VARCHAR
列中);如果您需要一个byte[]
数组,则进行转换(并将其存储在VARBINARY
列中)。
我总是建议你将图片存储为 varbinary(max) 在数据库中,因为 Varbinary 是性能激励,与 varchar(max) 相比占用的内存非常少。但是随着现代数据库和存储技术的发展,这可能不再是一个问题。如果你想要存储 byte[],就选择 varbinary(max)。如果你想要存储 base64 字符串,我总是建议使用 nvarchar(max)。然而性能和大小总是会很昂贵。