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个字节,无论里面存多少数据