2015-04-23 49 views
2

根據MSDN,VARCHAR數據類型的存儲大小是輸入數據的實際長度+ 2個字節。我試圖理解爲什麼當我運行此查詢:SQL Server中的DATALENGTH VARCHAR

DECLARE @VARCHAR VARCHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes, LEN(@VARCHAR) AS Characters; 

@VARCHAR的存儲大小是一樣的,因爲它是一個CHAR數據類型,這是25而不是27(25 + 2)。

它與DATALENGTH函數有關嗎?

回答

5

datalength會告訴你數據的字節數,它不包括數據在存儲之前的2個字節。 VARCHAR類型的2字節的開銷是記錄在字符串中的字節數 - 即在你的案件25

+0

我明白了。有沒有函數或sp來獲取它需要的存儲字節數? –

+1

'DATALENGTH(@VARCHAR)+ 2' :) –

4

DATALENGTH返回bytes used

LEN回報characters used

數數只是比較這些結果

DECLARE @VARCHAR VARCHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes, LEN(@VARCHAR) AS Characters; 

Bytes: 25 ==> As it is a variable length, returns 25  
Characters: 25 

DECLARE @VARCHAR CHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes, LEN(@VARCHAR) AS Characters; 

Bytes: 40 ==> As it is a fixed length, returns 40 
Characters: 25 

DECLARE @VARCHAR NVARCHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes, LEN(@VARCHAR) AS Characters; 

Bytes: 50 ==> As it is a variable length, returns 25*2 = 50 
Characters: 25 

DECLARE @VARCHAR NCHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes, LEN(@VARCHAR) AS Characters; 

Bytes: 80 ==> As it is a fixed length, returns 40*2 = 80 
Characters: 25 

你也可以輕鬆地添加+2DATALENGTHVARCHAR數據類型

DECLARE @VARCHAR VARCHAR(40) = 'RACING CLUB DE AVELLANEDA' 
SELECT DATALENGTH(@VARCHAR) AS Bytes 
     ,LEN(@VARCHAR) AS Characters 
     ,DATALENGTH(@VARCHAR) + 2 AS ActualUsedBytes 

輸出

Bytes Characters ActualUsedBytes 
25  25   27