【问题标题】:SQL server Varchar(max) and space takenSQL server Varchar(max) 和占用的空间
【发布时间】:2013-06-15 11:20:29
【问题描述】:

如果使用varchar(max)作为数据类型并且插入的数据小于完全分配,即只有200个字符,那么SQL Server总是会占用varchar(max)的全部空间还是只占用200个字符的空间?

此外,即使插入较少的数据也会占用最大空间的其他数据类型是什么?

是否有任何文件说明了这一点?

【问题讨论】:

  • 最大值为 2 GB。我认为每条记录不会占用 2 GB。

标签: sql-server sqldatatypes varcharmax


【解决方案1】:

来自MS DOCS on char and varchar (Transact-SQL)

char [ ( n ) ]
固定长度的非 Unicode 字符串数据。 n 定义字符串长度,并且必须是 1 到 8,000 之间的值。 存储大小为 n 字节。 char 的 ISO 同义词是 character。

varchar [ ( n | max ) ]
可变长度、非 Unicode 字符串数据。 n 定义字符串长度,可以是 1 到 8,000 之间的值。 max 表示最大存储大小为 2^31-1 字节(2 GB)。 存储大小为输入数据的实际长度+2字节。 varchar 的 ISO 同义词是 char 变化或字符变化。

因此对于 varchar,包括 max - 存储将取决于实际数据长度,而 char 始终是固定大小,即使没有使用整个空间。

【讨论】:

    【解决方案2】:

    仅对字符串使用CHAR 你知道谁的长度是固定的。例如,如果您定义一个域 其值仅限于“T”和“F”,您可能应该使 那CHAR[1]。如果您要存储美国社会安全号码,请 域CHAR[9](或CHAR[11],如果你想要标点符号)。

    VARCHAR 用于长度可变的字符串,例如名称、短字符串 描述等。当您不想担心时使用VARCHAR 剥离尾随空格。除非有充分的理由,否则请使用 VARCHAR 不要。

    【讨论】:

    • AFract - 请不要那么迂腐。 Hitesh 只是为原始问题增加了价值,他/她的回答肯定是相关的,我发现这很有帮助,而你/你的则不是。
    【解决方案3】:

    varchar 大小取决于数据的长度。所以在你的情况下,它只需要 200 个字符

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2013-08-27
      • 2011-11-24
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多