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

Ser*_*ats 3 sql-server

nvarchar(N)我想知道每条记录的一列将占用硬盘多少空间。它会占用 2 x N 字节(每个字符占用两个字节)还是会根据每个记录内的数据占用不同数量的字节?

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

 0000000000
 0000000001
 .....
 9999999999
Run Code Online (Sandbox Code Playgroud)

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

mar*_*c_s 6

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

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

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