【发布时间】:2015-05-27 00:32:04
【问题描述】:
我无法理解下面来自nchar and nvarchar的摘录
上面写着:
nchar [ ( n ) ]
固定长度的 Unicode 字符串数据。 n 定义字符串长度,并且必须是 1 到 4,000 之间的值。存储大小是 n 字节的两倍。当排序规则代码页使用双字节字符时,存储大小仍为 n 字节。根据字符串,n 字节的存储大小可能小于为 n 指定的值。 nchar 的 ISO 同义词是 national char 和 national character..
我在上面的陈述中发现了一些矛盾,例如:
参见第二句,它说存储大小是 n 字节的两倍,在下一句中它说 存储大小仍然是 n 字节。在第一句中它说它具有固定长度,在第四句中它说 n 字节的存储大小可以小于为 n 指定的值。
提前致谢。
【问题讨论】:
-
最后一个并不矛盾。您可以为 nchar(n) 列分配少于 'n' 个字符。该列仍然占用 2*n 个字节,并且该值实际上被填充为 n 个字符。
-
我怀疑文档有误。我认为他们的意思是“存储大小仍然是 n 字节的两倍”,因为 nchar 是固定长度。
-
@pmbAustin:我明白你想说什么,其实我也有同样的看法,但是文档说->>> n 字节的存储大小可以小于为 n 指定的值.我认为存储大小应该是固定的,实际上这就是填充的原因。不是吗?
-
NCHAR是一个固定长度类型 - 它会总是使用定义的尽可能多的字符;NCHAR是 Unicode 类型,这意味着 每个字符 2 个字节。所以NCHAR(20)总是会占用 40 个字节。 -
@marc_s : 所以需要更正sql server文档:)