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类型
答案 0 :(得分:1)
是的 - 你的问题是什么?
如果您未在CAST
或CONVERT
中定义长度,则 30个字符是系统默认值。
所以这个
SELECT DATALENGTH(CONVERT(char, 'źźźź'))
相当于
SELECT DATALENGTH(CONVERT(char(30), 'źźźź'))
由于CHAR
(和NCHAR
)数据类型始终填充到其定义的长度,因此您获得30个字符,因此30(char
)和60(nchar
)字节长度。
完全清晰且记录完备 - 请参阅MSDN documentation on CAST and CONVERT
长度
是一个可选的整数,指定目标数据类型的长度。 默认值为30 。
当您使用可变长度字符串而不是varchar
或nvarchar
时,您只能获得与字符串中确实存储的字符数一样多的字符 - 因此您将获得4个字符,从而获得4个字符和8个字符长度的字节。