日期:2014-05-17  浏览次数:20447 次

解釋一下數據類型的長度
declare @str1 nvarchar(20)
set @str1='test'
select datalength(@str1)

declare @str2 nvarchar(3)
set @str2='testtest'
select datalength(@str2)

declare @str3 nvarchar
set @str3='test'
select datalength(@str3)


解釋一下上面3個結果的值

------解决方案--------------------
declare @str3 nvarchar 默认就是Nvarchar(1)
------解决方案--------------------
这个函数计算的是字节个数,不是字符的个数,而nvarchar的一个字符,占用2个字节。
所以第1个返回8就很正常。

第2个之所以返回6,是因为你定义的长度时nvarchar(3),也就是只能存放3个字符:tes,所以3*2 = 6

第3个也是一样的,只能存储1个字符,所以也就是:t




declare @str1 nvarchar(20)
set @str1='test'
select datalength(@str1),@str1


declare @str2 nvarchar(3)
set @str2='testtest'
select datalength(@str2),@str2


declare @str3 nvarchar
set @str3='test'
select datalength(@str3),@str3
/*
----------- --------------------
8           test

(1 行受影响)

            
----------- ----
6           tes

(1 行受影响)

            
----------- ----
2           t

(1 行受影响)


*/

------解决方案--------------------
需要特别注意的是:datalength计算的是字节个数,不是字符的个数
------解决方案--------------------
datalength是返回字节数,一个Unicode存2个字节。所以第三个为2.第一个为2*4个字符=8bytes。第二个,由于你限制了长度为3,也就是只有6个字节,无论里面存多少数据