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类型。
发布于 2014-03-16 19:15:38
是的-那你有什么问题?
如果没有在或CONVERT中定义CAST长度,则30字符是系统默认值。
所以这就是
SELECT DATALENGTH(CONVERT(char, 'źźźź')) 等于
SELECT DATALENGTH(CONVERT(char(30), 'źźźź')) 而且,由于CHAR (和NCHAR)数据类型是,所以总是将填充到它们定义的长度中,因此可以得到30个字符,从而得到30个(char)和60个(nchar)字节长度。
所有这些都很清晰,并且有很好的文档--参见有关强制转换和转换的MSDN文档
长度 指定目标数据类型长度的可选整数。默认值为30__。
当您使用可变长度字符串而不是varchar或nvarchar时,您只会得到字符串中真正存储的字符数量--因此您将得到4个字符,从而得到4个和8个字节的长度。
https://stackoverflow.com/questions/22441409
复制相似问题