如果内部字符串短于最大长度,则nvarchar列占用磁盘空间

时间:2018-03-28 09:24:02

标签: sql-server

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

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

 0000000000
 0000000001
 .....
 9999999999

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

2 个答案:

答案 0 :(得分:2)

假设所有值都是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  |
+--------------+---------------+-------------------+-------+

NVARCHAR = 2 +(Data_Length * 2)

VARCHAR = 2 + Data_Length

NCHAR = 2 * Column_Defined_Length

CHAR = Column_Defined_Length

答案 1 :(得分:2)

nvarchar(n)列使用(2 *实际长度)+ 2字节存储 - 无论存储什么,总是每个字符2个字节

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

但如果你只存储号码 - 为什么你甚至打扰nvarchar?数字应存储在数字列中......或者如果不能,则至少使用<{1}} 一半存储要求(1个字符/数字= 1个字节)