我记得很久以前在学术界被告知,当给定varchar(9)时,Oracle会分配空间来实际存储16个字节的字符,即使它只需要9个(预宽字符)
这仍然是一件事(这是不是一件事)?如果我分配nvarchar(63)它会最大化存储空间(假设为空字符)?它仍然需要与nvarchar(50)相同的空间吗?索引有什么好处吗?
我主要关注MSSQL,但有兴趣知道任何数据库。
答案 0 :(得分:3)
它没有预先将空间分配给nvarchar
空格是字符数* 2字节+ 2字节大小
如果存储了40个字符,则nvarchar(63)和nvarchar(50)的大小将相同,为82字节
区别在于你不能把51个字符放在nvarchar(50)
中答案 1 :(得分:2)
SQL Server在nvarchar字符串中为非常实际的字符分配两个字节。因此,对于声明为Nvarchar(10)='Ben'的nvarchar字符串,Sql服务器将允许最多10个字符的名称,并使用6个字节来保存字符串“Ben”。它还会使用一些空间来保存字符串的实际长度(我相信两个字节)。