nvarchar 和varchar 在len下一致,datalength下nvarchar翻倍

 

上一篇文档,写的是,老程序存储数据没有trim,导致的一些长度问题:截断字符串

和客户说是,还闹出了一个不大的笑话,当时提供脚本给客户的生产环境,用的是len,len()函数会把后面的空格自动过滤,结果显示没有空格,长度没问题,

然后用datalength()函数才搞出来,成功向客户证明这个他们原来的系统的一个隐藏issue.

随后自己有在本机实验了连个函数的区别,,win8,64位,英文系统, 

DECLARE @testLen nvarchar(32)
SET @testLen=' A '
PRINT LEN(@testLen)--2
PRINT DATALENGTH(@testLen)--6

DECLARE @testLen1 varchar(32)
SET @testLen1=' A '
PRINT LEN(@testLen1)--2
PRINT DATALENGTH(@testLen1)--3
GO
PRINT 'no space '
DECLARE @testLen nvarchar(32)
SET @testLen=' A A'
PRINT LEN(@testLen)--4
PRINT DATALENGTH(@testLen)--8

DECLARE @testLen1 varchar(32)
SET @testLen1=' A A'
PRINT LEN(@testLen1)--4
PRINT DATALENGTH(@testLen1)--4

nvarchar 长度在datalength时,会倍于varchar.(因为nvarchar 字节的存储大小是所输入字符个数的两倍。)

nvarchar和varchar在len()函数中保持一致

也就是说,DaditaLength是数据库存了啥就是啥,len函数在显示时trim掉了尾部的空格

posted @ 2017-07-03 16:44  独孤正龙  阅读(342)  评论(0)    收藏  举报