Sql server 如果nvarchar列中的字符串短于最大长度,那么nvarchar列在磁盘上会占用多少空间

Sql server 如果nvarchar列中的字符串短于最大长度,那么nvarchar列在磁盘上会占用多少空间,sql-server,Sql Server,我想知道每一条记录的nvarchar(N)列在硬盘上会占用多少空间。它需要2xn字节(每个字符需要两个字节)还是需要不同的字节数,取决于每个记录中的数据 例如,我可以有一个表,其中只有一列类型为nvarchar(100),其中包含如下数字: 0000000000 0000000001 ..... 9999999999 我有100亿(10^10)条记录,每条记录有10个字符。硬盘需要多少空间?20Gb?200Gb?假设所有值的长度正好为10个字符,它们将占用的空间为: +--------

我想知道每一条记录的
nvarchar(N)
列在硬盘上会占用多少空间。它需要2xn字节(每个字符需要两个字节)还是需要不同的字节数,取决于每个记录中的数据

例如,我可以有一个表,其中只有一列类型为
nvarchar(100)
,其中包含如下数字:

 0000000000
 0000000001
 .....
 9999999999

我有100亿(10^10)条记录,每条记录有10个字符。硬盘需要多少空间?20Gb?200Gb?

假设所有值的长度正好为10个字符,它们将占用的空间为:

+--------------+---------------+-------------------+-------+
|     Type     | Bytes per row |    Total bytes    |  GB   |
+--------------+---------------+-------------------+-------+
| NVARCHAR(10) |            22 |  220,000,000,000  |  220  |
| VARCHAR(10)  |            12 |  120,000,000,000  |  120  |
| NCHAR(10)    |            20 |  200,000,000,000  |  200  |
| CHAR(10)     |            10 |  100,000,000,000  |  100  |
+--------------+---------------+-------------------+-------+
=2+(数据长度*2)

=2+数据长度

=2*列定义的长度

=Column_Defined_Length

A
nvarchar(n)
Column使用(2*实际长度)+2字节的存储空间-无论存储什么,每个字符始终2字节

因此,如果您在
nvarchar(100)
列中存储10位数字,则每个字符串使用
2*10+2=22字节


但如果您只存储数字,为什么还要麻烦使用
nvarchar
??数字应存储在数字列中。。。或者,如果您不能,那么至少使用
varchar
,这将存储需求的一半(1个字符/数字=1个字节)

A
nvarchar(n)
列使用(2*实际长度)+2个字节的存储空间-无论存储什么,每个字符始终有2个字节。因此,如果在
nvarchar(100)
列中存储10位数字,则每个字符串使用2*10+2=22字节。但如果您只存储数字,为什么还要麻烦使用
nvarchar
??数字应该存储在数字列中……@marc_s您应该将此作为答案添加。感谢您的回答marc_s,我不是只在我的实表中存储数字,为了简单起见,我使用这些数字作为示例。如果它们总是十个字符长,并且只包含字符0-9,那么为什么不将它们存储为字符(10)哪个没有varchar/nvarchar的2字节开销?这假设
数据压缩=无
(默认值),但可以使用
创建/更改表
指定
页面
,以减少物理空间需求。压缩时的存储量取决于数据。压缩可以在SQL 2016 SP1+的所有SQL版本中使用,但在早期版本中需要Enterprise。