2009-12-22 144 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)。但是性能和尺寸總是很昂貴。

相關問題