一、SQL Server中Len()
返回指定字符串表达式的字符(而不是字节)数,其中不包含尾随空格。
二、SQL Server中DataLength()
返回用于表示任何表达式的字节数
三、通过实例说明SQL Server中Len
和DataLength
的区别
实例1、相同,返回结果都为5
select LEN ('sssss') ---5
select DATALENGTH('sssss') ---5
实例2、不相同,DATALENGTH
是LEN
的两倍,因为每个使用Unicode
字符集的字符都要占用2个字节
select LEN(N'sssss') ---5
select DATALENGTH(N'sssss') ---10
实例3、不相同,DATALENGTH
是LEN
的两倍多,由于LEN
计算时不包含尾空格
select LEN(N'sssss ') ---5
select DATALENGTH(N'sssss ') ---14
实例4、不相同,DATALENGTH
是LEN
的两倍,由于LEN
计算时不包含尾空格,但包含头部空格
select LEN(N' sssss') ---6
select DATALENGTH(N' sssss') ---12
SQL Server
中的DataLength
和Len
函数
DataLength
返回字符串的字节长度.Len
返回字符串的字符长度.
这种区别主要存在于中英文混输的情况.用以下例子来说明情况.
example :
select len(convert(varchar(50),N'狮lion')) --5 N''表示Unicode格式字符串
select datalength(convert(varchar(50),N'狮lion')) --6
select len(N'狮lion') --5
select datalength(N'狮lion') --10
接下来我们分析一下为何会这样.Len
返回字符串的字符长度,这个好理解,一个汉字'狮'+4个字母'lion'=5个字符
.每个汉字和字母都占一个字符长度.DataLength
返回字符串的字节长度.对于字节长度,需要理解:一般编码模式下,汉字和英文字母所占字节是不一样的.一般来说,汉字占2个字节,英文字符占一个字节.而对于Unicode
编码,汉字和英文字母都占2
个字节.
讲解一下varchar
和nvarchar
的区别,varchar
是普通编码的字符串,nvarchar
是Unicode
编码的字符串,对应例子,就是对汉字’狮’来说,varchar
格式的字符串长度为1
,nvarchar
格式的字符串长度为2
.
因此对以上例子来说:
len(convert(varchar(50),N'狮lion')) --返回字符长度,'狮lion',一共5个字符,varchar格式字符
len(N'狮lion') --返回字符长度,'狮lion',一共5个字符,nvarchar格式字符
datalength(convert(varchar(50),N'狮lion')) --返回字节长度,varchar格式字符'狮lion','狮'占2个字节,
--'lion'中每个字母占用一个字节,共占用4个字节
datalength(N'狮lion') --返回字节长度,Unicode格式字符,汉字'狮'占2个字节,
--'lion'中每个字母占用2个字节,共占用8个字节