代码
DECLARE @a NVARCHAR(20),
@b NVARCHAR(20),
@c NVARCHAR(20)
SET @a = 'abc'
SET @b = ' abc'
SET @c = 'abc '
SELECT LEN(@a) AS [LEN],DATALENGTH(@a) AS [DATALENGTH] --3,6
SELECT LEN(@b) AS [LEN],DATALENGTH(@b) AS [DATALENGTH] --4,8
SELECT LEN(@c) AS [LEN],DATALENGTH(@c) AS [DATALENGTH] --3,8
@b NVARCHAR(20),
@c NVARCHAR(20)
SET @a = 'abc'
SET @b = ' abc'
SET @c = 'abc '
SELECT LEN(@a) AS [LEN],DATALENGTH(@a) AS [DATALENGTH] --3,6
SELECT LEN(@b) AS [LEN],DATALENGTH(@b) AS [DATALENGTH] --4,8
SELECT LEN(@c) AS [LEN],DATALENGTH(@c) AS [DATALENGTH] --3,8
Len()返回指定字符串表达式的字符数,其中不包含尾随空格
DataLength() 返回用于表示任何表达式的字节数。
但是我还发现了以下的一些问题:
代码
DECLARE @d VARCHAR(20),--可变长度,非 Unicode 字符数据。n 的取值范围为 1 至 8,000。max 指示最大存储大小是 2^31-1 个字节。存储大小是输入数据的实际长度加 2 个字节。所输入数据的长度可以为 0 个字符
@e NCHAR(20),--n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。
@f CHAR(20)--固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节
SET @d = 'abc'
SET @e = 'abc'
SET @f = 'abc'
SELECT LEN(@d) AS [LEN],DATALENGTH(@d) AS [DATALENGTH] --3,3
SELECT LEN(@e) AS [LEN],DATALENGTH(@e) AS [DATALENGTH] --3,40
SELECT LEN(@f) AS [LEN],DATALENGTH(@f) AS [DATALENGTH] --3,20
@e NCHAR(20),--n 个字符的固定长度的 Unicode 字符数据。n 值必须在 1 到 4,000 之间(含)。存储大小为两倍 n 字节。
@f CHAR(20)--固定长度,非 Unicode 字符数据,长度为 n 个字节。n 的取值范围为 1 至 8,000,存储大小是 n 个字节
SET @d = 'abc'
SET @e = 'abc'
SET @f = 'abc'
SELECT LEN(@d) AS [LEN],DATALENGTH(@d) AS [DATALENGTH] --3,3
SELECT LEN(@e) AS [LEN],DATALENGTH(@e) AS [DATALENGTH] --3,40
SELECT LEN(@f) AS [LEN],DATALENGTH(@f) AS [DATALENGTH] --3,20
对于这三种类型,DataLength返回的结果,我真是一头雾水,请高人指点。谢谢!