关于SQL Server中的nchar的困惑

时间:2015-03-23 20:48:05

标签: sql-server sqldatatypes

我无法理解nchar and nvarchar

下面的摘录

它说:

  

nchar [(n)]

     

固定长度的Unicode字符串数据。 n定义字符串长度,并且必须是1到4,000之间的值。存储大小是n个字节的两倍。当排序规则代码页使用双字节字符时,存储大小仍为n个字节。根据字符串,n个字节的存储大小可能小于为n指定的值。 nchar的ISO同义词是国家字符和国家字符..

我在上述陈述中发现了一些矛盾:

请参阅第二句,其中存储大小是n字节的两倍,在下一句中,它表示存储大小仍为n字节。在第一句中,它表示它具有固定长度,在第4句中,它表示n个字节的存储大小可能小于为n指定的值。

提前致谢。

1 个答案:

答案 0 :(得分:0)

基本上,nchar和nvarchar存储unicode字符串。
您看到的n是将存储在nchar列中的字符数,或者将存储在nvarchar列中的最大字符数。
根据字符串,nchar的存储大小可能小于n。因为nchar是固定的长度,这意味着它会向比n短的字符串添加空格。这意味着如果将字符串'h'存储在nchar(6)列中,它将被视为带有5个尾随空格的'h'。我猜测尾随空格实际上并未存储在数据库中,因此存储大小可能小于n。

然而,在nvarchar中,情况并非如此。 nvarchar的存储大小始终为(n * 2)+ 2个字节。