我想知道每个记录在硬盘上占用多少空间nvarchar(N)
列。它需要2 x N个字节(每个字符需要两个字节)还是需要不同的字节数,具体取决于每条记录中的数据?
例如,我可以拥有一个只包含nvarchar(100)
类型列的表,其中包含以下数字:
0000000000
0000000001
.....
9999999999
我有10亿(10 ^ 10)条记录,每条记录有10个字符。硬盘需要多少空间? 20GB? 200GB?
答案 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个字节)