我在SQL Server中有表“Temp”,它还有Addr1,Addr2,Addr3,Addr4列以及一些其他列。
这些Addr1,Addr2,Addr3和Addr4是nvarchar类型。当我通过对象资源管理器检查此列的大小时。它以nvarchar(100)显示所有这些。
但是当我使用Alt + F1检查它们时。它在结果窗格中显示详细信息,长度为200.截图如下。
为什么有不同? 如果我输入超过100个字符,我会遇到截断错误?好像只需要100个字符。
你可以告诉我长度值是多少?谢谢, 普拉卡什。
答案 0 :(得分:11)
由于对象资源管理器中列出的尺寸为字符数,因此查询结果中列出的尺寸为sp_help
是字节数。< / p>
SQL中的
VARCHAR
值每个字符使用1个字节,而NVARCHAR
值每个字符使用2个字节。两者都需要2字节的开销 - 见下文。因此,由于您正在查看NVARCHAR
列,因此需要200个(实际上是202个)字节来存储100个字符,其中VARCHAR
只需要100个(实际上是102个)。
<强>参考文献:强>
存储大小是输入数据的实际长度+ 2个字节。
存储大小(以字节为单位)两次输入的实际数据长度+2个字节。
(强调我的)
报告有关数据库对象(sys.sysobjects兼容性视图中列出的任何对象),用户定义的数据类型或数据类型的信息。
/------------------------------------------------------------------------\ | Column name | Data type | Description | |-------------+-----------+----------------------------------------------| | Length | smallint | Physical length of the data type (in bytes). | \------------------------------------------------------------------------/