1
SELECT DATALENGTH('źźźź')                       -- 4
SELECT DATALENGTH(CONVERT(char, 'źźźź'))        -- 30
SELECT DATALENGTH(CONVERT(nchar, 'źźźź'))       -- 60
SELECT DATALENGTH(CONVERT(varchar, 'źźźź'))     -- 4
SELECT DATALENGTH(CONVERT(nvarchar, 'źźźź'))    -- 8

我知道 char 是非 Unicode 类型,但 nchar 实际上是 unicode 类型

4

1 回答 1

1

是的 - 你的问题是什么?

如果您没有在 a或中定义长度,则30 个字符是系统默认值。CASTCONVERT

所以这

SELECT DATALENGTH(CONVERT(char, 'źźźź'))  

相当于

SELECT DATALENGTH(CONVERT(char(30), 'źźźź'))  

并且由于CHAR(and NCHAR) 数据类型总是填充到它们定义的长度,因此您得到 30 个字符,因此长度为 30 ( char) 和 60 ( nchar) 字节。

一切都非常清楚且有据可查 - 请参阅有关 CAST 和 CONVERT 的 MSDN 文档

长度

是一个可选整数,它指定目标数据类型的长度。默认值为30 。

当您使用可变长度字符串代替varcharornvarchar时,您只会获得与字符串中实际存储的字符一样多的字符 - 因此您会获得 4 个字符,从而获得 4 个字节和 8 个字节的长度。

于 2014-03-16T19:15:38.197 回答