4

我有SQL Server中的表说“Temp”,它有Addr1,Addr2,Addr3,Addr4列和一些其他列也在那里。列SQL Server大小差异

这些Addr1,Addr2,Addr3和Addr4是nvarchar类型。当我通过对象浏览器检查此列的大小时。它在nvarchar(100)中显示它们全部。

enter image description here

但是当我检查他们可以使用Alt + F1。它显示结果窗格中的细节,长度为200.截图如下。

enter image description here

为什么会有不同? 如果我输入超过100个字符,我会得到截断错误?似乎只需要100个字符。

请问请告诉我长度值是什么意思?

谢谢, 普拉卡什。

+0

[这里已经anwered](http://stackoverflow.com/a/21259797/4366471)。 –

+1

@WojciechTomczyk是吗?这个答案似乎并没有专门针对你在对象资源管理器中看到的与'sp_help'的结果之间的差异,只是指出'NVARCHAR'值需要两倍的存储空间。除非我误解了你所链接的问题/答案。 – 3N1GM4

+0

@ 3N1GM4是的,+1。我太热心于链接答案... –

回答

9

因为在对象资源管理器中列出的大小是字符,并在查询中sp_help结果中列出的大小数是字节数

VARCHAR SQL中的值每个字符使用1个字节,而NVARCHAR值使用每个字符2个字节。两者都需要2字节开销 - 见下文。因此,因为您正在查看NVARCHAR列,这些列需要200(实际上为202)字节来存储100个字符,其中VARCHAR只需要100(真的是102)。

参考文献:

MSDN: char and varchar

存储大小为输入+ 2个字节的数据的实际长度。

MSDN: nchar and nvarchar

存储大小,以字节为单位,是两次数据的实际长度输入+ 2个字节。

(重点煤矿)

MSDN: sp_help:与数据库对象

报告信息(在sys.sysobjects兼容性视图中列出的任何物体),用户定义的数据类型,或数据类型。

 
    /------------------------------------------------------------------------\ 
    | Column name | Data type | Description         | 
    |-------------+-----------+----------------------------------------------| 
    | Length | smallint | Physical length of the data type (in bytes). | 
    \------------------------------------------------------------------------/ 
+0

好知道! :) –

+0

谢谢。现在我明白了.. –

+0

随时接受答案,如果它回答你的问题@ ps_prakash02 - 很高兴我可以帮助! – 3N1GM4