我想知道每条记录在硬盘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