列的SQL Server大小差异

时间:2017-01-05 12:25:02

标签: sql sql-server sql-server-2008 sql-server-2005 sql-server-2012

我在SQL Server中有表“Temp”,它还有Addr1,Addr2,Addr3,Addr4列以及一些其他列。

这些Addr1,Addr2,Addr3和Addr4是nvarchar类型。当我通过对象资源管理器检查此列的大小时。它以nvarchar(100)显示所有这些。

enter image description here

但是当我使用Alt + F1检查它们时。它在结果窗格中显示详细信息,长度为200.截图如下。

enter image description here

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

你可以告诉我长度值是多少?

谢谢, 普拉卡什。

1 个答案:

答案 0 :(得分:11)

由于对象资源管理器中列出的尺寸为字符数,因此查询结果中列出的尺寸为sp_help字节数。< / p> SQL中的

VARCHAR值每个字符使用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). |
    \------------------------------------------------------------------------/