【问题标题】:SQL Server size difference for a column列的 SQL Server 大小差异
【发布时间】:2017-05-19 23:56:59
【问题描述】:

我在 SQL Server 中有一个表说“Temp”,它有 Addr1、Addr2、Addr3、Addr4 列和一些额外的列。

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

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

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

您能告诉我指定的长度值是多少吗?

谢谢, 普拉卡什。

【问题讨论】:

  • @WojciechTomczyk 是吗?该答案似乎并未具体处理您在对象资源管理器中看到的内容与sp_help 的结果之间的差异,只是指出NVARCHAR 值占用了两倍的存储空间。除非我误解了您所链接的问题/答案。
  • @3N1GM4 是的,为此 +1。我太热衷于链接答案...

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


【解决方案1】:

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

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 兼容性视图中列出的任何对象)、用户定义的数据类型或数据类型的信息。

/---------------------------------------------------- ----------------------\ |列名 |数据类型 |说明 | |-------------+-----------+---------- ----------------------| |长度 |小号 |数据类型的物理长度(以字节为单位)。 | \-------------------------------------------------- ------------------------------------/

【讨论】:

  • 如果它回答了您的问题@ps_prakash02,请随时接受答案 - 很高兴我能提供帮助!
  • 完成。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-09
  • 1970-01-01
  • 1970-01-01
  • 2015-05-12
  • 2012-04-25
相关资源
最近更新 更多