SQL server Varchar(max) 和占用的空间
Posted
技术标签:
【中文标题】SQL server Varchar(max) 和占用的空间【英文标题】:SQL server Varchar(max) and space taken 【发布时间】:2013-06-15 11:20:29 【问题描述】:如果使用varchar(max)
作为数据类型并且插入的数据小于完全分配,即只有200个字符,那么SQL Server总是会占用varchar(max)
的全部空间还是只占用200个字符的空间?
此外,即使插入较少的数据也会占用最大空间的其他数据类型是什么?
是否有任何文件说明了这一点?
【问题讨论】:
最大值为 2 GB。我认为每条记录不会占用 2 GB。 【参考方案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 个字符。
【讨论】:
以上是关于SQL server Varchar(max) 和占用的空间的主要内容,如果未能解决你的问题,请参考以下文章
SQL Server 自动确定来自 VARCHAR(MAX) 列的数据类型
无法使用 SSIS 将 SQL Server varchar(max) 传输到 MySQL 文本
varchar(max) MS SQL Server 2000,有问题吗?
SQL Server Always Encrypted:操作数类型冲突:varchar 与 varchar(max) 不兼容