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



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

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

0000000000
0000000001
.....
9999999999

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

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

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

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

假设所有值的长度正好为 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)

瓦尔查尔 = 2 + Data_Length

NCHAR = 2 * Column_Defined_Length

查尔 = Column_Defined_Length

最新更新