我想知道SQL Server如何在内部处理varchar
动态长度和存储。
如果我知道我有固定长度的字符列在列中,是否有用Varchar
我知道CHAR
和VARCHAR
之间存在差异,但在大数据库中使用数据库设计CHAR
或VARCHAR
的最佳方法是什么?
答案 0 :(得分:3)
CHAR在行中分配其大小,VARCHAR存储字符串的实际大小(2个字节),然后是真实字符串,因此varchar的开销是+2个字节,CHAR的开销是 - 它的大小减去实际字符串长度。如果在varchar中存储了NULL值 - 它在db中的大小为零。
record header 4 bytes long two bytes of record metadata (record type) two bytes pointing forward in the record to the NULL bitmap fixed length portion of the record, containing the columns storing data types that have fixed lengths (e.g. bigint, char(10), datetime) NULL bitmap two bytes for count of columns in the record variable number of bytes to store one bit per column in the record, regardless of whether the column is nullable or not (this is
与SQL Server 2000不同且简单,每个有一位 仅限可空栏目) 这允许在读取NULL列时进行优化 可变长度列偏移数组 两个字节用于可变长度列的计数 每个可变长度列两个字节,给出列值末尾的偏移量 版本标记 这仅在SQL Server 2005中,是一个14字节的结构,包含一个时间戳和一个指向版本存储的指针 tempdb的