【问题标题】:Allocation of space for nvarchar and varchar为 nvarchar 和 varchar 分配空间
【发布时间】:2015-03-20 19:01:02
【问题描述】:

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

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

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

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    它不会为 nvarchar 预分配空间

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

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

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

    【讨论】:

    • 更简洁地说,SQL(以及 MySQL)不会为 VARCHAR cols 预先分配空间,这正是我所寻找的。谢谢。
    【解决方案2】:

    SQL Server 为 nvarchar 字符串中的非常实际的字符分配两个字节。因此,对于声明为 Nvarchar(10) ='Ben' 的 nvarchar 字符串,Sql 服务器将允许最多 10 个字符的名称并使用六个字节来保存字符串“Ben”。它还会使用一些空间来保存字符串的实际长度(我相信是两个字节)。

    【讨论】:

      猜你喜欢
      • 2013-01-16
      • 2021-10-12
      • 2013-04-07
      • 2011-12-11
      • 2011-07-11
      • 2023-03-24
      • 2011-12-21
      • 2016-10-25
      相关资源
      最近更新 更多