我從要插入到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