2017-06-20 150 views
0

varchar轉換爲varbinary時,我可以將其還原。例如:將NVARCHAR轉換爲VARBINARY時的問題

SELECT CAST('_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) 
     ,CAST('_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY); 

給出兩個不同的輸出:

0x5F415F4272616E64315B5F315D41355F4C505B5F3 5D2E4135 0x5F415F4272616E64315B5F315D41355F4C505B5F3 5D2E4135

但如果我使用nvarchar我得到相同的輸出:

SELECT CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) 
     ,CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY); 

0x5F0041005F004200720061006E00640031005B005F0031005D0041003500 0x5F0041005F004200720061006E00640031005B005F0031005D0041003500

這是一個問題,因爲我以後就不能進行正確的操作:

SELECT CAST(CAST('_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) AS VARCHAR(MAX)) 
     ,CAST(CAST('_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY) AS VARCHAR(MAX)); 

SELECT CAST(CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY) AS NVARCHAR(MAX)) 
     ,CAST(CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY) AS NVARCHAR(MAX)); 

首先是確定:

_A_Brand1[_1]A5_LP[_1].A5 
_A_Brand1[_1]A5_LP[_2].A5 

第二返回相同字符串(值丟失/切割):

_A_Brand1[_1]A5 
_A_Brand1[_1]A5 

回答

3

VARBINARY缺省長度是30,這就是爲什麼數據被截斷。

更正代碼:

SELECT CAST(CAST(N'_A_Brand1[_1]A5_LP[_1].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX)) 
     ,CAST(CAST(N'_A_Brand1[_1]A5_LP[_2].A5' AS VARBINARY(MAX)) AS NVARCHAR(MAX));