2009-12-22 147 views
4

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

问候

回答

8

由于它是一个字符串,并且字符串是一个字符串是一个字符串,所以您应该可以将它放入VARCHAR(x)VARCHAR(MAX)字段中,不会有任何问题。

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

+1

你说这是一个字符串吗? ;) – 2009-12-22 10:17:33

+2

我做到了 - 你没有明白吗? :d – 2009-12-22 14:22:08

11

如果要存储您的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

+0

你节省了我的一天 – VJAI 2012-10-29 12:37:35

1

varbinary(MAX)将是最高效的存储介质(原始字节小于b64编码),但您必须将b64转换为原始字节。如果你想存储b64,只需使用varchar(max)即可。真的取决于 - 如果你要把它重新刻划成XML,那么离开b64就不那么容易了。

1

您可以插入Base64编码字符串本身为VARCHAR列,你可以在Base64编码字符串转换回byte[]阵列和存储在VARBINARY列。

决定哪个选项最合适取决于您随后需要处理的数据。如果你需要一个Base64字符串,那么保持这种方式(在VARCHAR列);如果你需要一个byte[]数组然后将其转换(并将其存储在VARBINARY列中)。

4

值得指出的是,如果你使用varchar(x)varchar(max)使用Base64字符串和您使用的base64字符串中的任何WHERE条款进行查找,你应该在列,因为情况是显著用base64编码数据使用区分大小写的排序规则。

0

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

相关问题