上一篇文档,写的是,老程序存储数据没有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掉了尾部的空格