为 nvarchar 和 varchar 分配空间

Hig*_*ead 1 t-sql sql-server

我记得前一段时间在学术界被告知,当给定 (9) 的 varchar 时,Oracle 会分配空间来实际存储 16 个字节的字符,即使它只需要 9 个。(前宽字符)

这还是一件事吗(这曾经是一件事)吗?如果我分配 nvarchar(63) 是否会最大化存储空间(假设为空字符)?它仍会占用与 nvarchar(50) 相同的空间吗?索引有什么好处吗?

我主要关注 MSSQL,但有兴趣了解任何数据库。

pap*_*zzo 6

它不会为 nvarchar 预分配空间

空间是字符数 * 2 字节 + 2 字节的大小

如果您存储了 40 个字符,则 nvarchar(63) 和 nvarchar(50) 的大小都是相同的 82 字节

不同之处在于您不能在 nvarchar(50) 中放入 51 个字符