2015-04-23 67 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