列的SQL Server大小差异

ps_*_*h02 4 sql sql-server sql-server-2005 sql-server-2008 sql-server-2012

我在SQL Server中有一个表"Temp",它还有Addr1,Addr2,Addr3,Addr4列以及一些其他列.

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

在此输入图像描述

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

在此输入图像描述

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

你能告诉我长度值是多少?

谢谢,普拉卡什.

3N1*_*GM4 12

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

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

参考文献:

MSDN:char和varchar

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

MSDN:nchar和nvarchar:

存储大小(以字节为单位)是输入数据的实际长度的两倍 + 2个字节.

(强调我的)

MSDN:sp_help:

报告有关数据库对象(sys.sysobjects兼容性视图中列出的任何对象),用户定义的数据类型或数据类型的信息.

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