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个).
参考文献:
存储大小是输入数据的实际长度+ 2个字节.
存储大小(以字节为单位)是输入数据的实际长度的两倍 + 2个字节.
(强调我的)
报告有关数据库对象(sys.sysobjects兼容性视图中列出的任何对象),用户定义的数据类型或数据类型的信息.
/------------------------------------------------------------------------\
| Column name | Data type | Description |
|-------------+-----------+----------------------------------------------|
| Length | smallint | Physical length of the data type (in bytes). |
\------------------------------------------------------------------------/
| 归档时间: |
|
| 查看次数: |
863 次 |
| 最近记录: |