我从要插入到SQL Server数据库的XML文件中获取基本64字符串。哪个字段类型在我的数据库中有字段? VARBINARY(MAX)?在插入到我的数据库之前,是否必须将base 64字符串转换为另一种格式?将基础64字符串插入到SQL Server数据库中
问候
我从要插入到SQL Server数据库的XML文件中获取基本64字符串。哪个字段类型在我的数据库中有字段? VARBINARY(MAX)?在插入到我的数据库之前,是否必须将base 64字符串转换为另一种格式?将基础64字符串插入到SQL Server数据库中
问候
由于它是一个字符串,并且字符串是一个字符串是一个字符串,所以您应该可以将它放入VARCHAR(x)
或VARCHAR(MAX)
字段中,不会有任何问题。
“大小”VARCHAR(x)
有一个最大值。长度为8000个字符,而VARCHAR(MAX)
以2 GB(2 ** 31-1字节)的大小最高。
如果要存储您的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。
你节省了我的一天 – VJAI 2012-10-29 12:37:35
varbinary(MAX)将是最高效的存储介质(原始字节小于b64编码),但您必须将b64转换为原始字节。如果你想存储b64,只需使用varchar(max)即可。真的取决于 - 如果你要把它重新刻划成XML,那么离开b64就不那么容易了。
您可以插入Base64编码字符串本身为VARCHAR
列,或你可以在Base64编码字符串转换回byte[]
阵列和存储在VARBINARY
列。
决定哪个选项最合适取决于您随后需要处理的数据。如果你需要一个Base64字符串,那么保持这种方式(在VARCHAR
列);如果你需要一个byte[]
数组然后将其转换(并将其存储在VARBINARY
列中)。
值得指出的是,如果你使用varchar(x)
或varchar(max)
使用Base64字符串和您使用的base64字符串中的任何WHERE
条款进行查找,你应该在列,因为情况是显著用base64编码数据使用区分大小写的排序规则。
我总是建议你将图像存储为数据库中的varbinary(max),因为Varbinary是性能激励,与varchar(max)相比占用的内存非常少,但是对于现代数据库和存储,这可能少得多的关切。如果你想存储byte []去varbinary(max)。如果你想存储base64字符串,我总是建议nvarchar(max)。但是性能和尺寸总是很昂贵。
你说这是一个字符串吗? ;) – 2009-12-22 10:17:33
我做到了 - 你没有明白吗? :d – 2009-12-22 14:22:08