Char
和Varchar
是SQL中的数据类型,就像在许多其他语言中一样(因此这个问题可以是多语言的)。据我所了解,区别在于如果我将
Char
声明为Char(20)
,它将分配20个字节(或位)[有人能否澄清一下这一点?现在我将使用字节。]。然后,如果我只使用了16个字节,仍然会将4个字节分配给该字段。(浪费了4个字节的内存。)但是,如果我将
varchar
声明为varchar(20)
并且只使用了16个字节,则只会分配16个字节。这肯定更好吧?为什么有人选择
char
?是出于传统原因,还是我漏掉了什么东西?
Char(20)
将分配足够的空间来容纳20个字符。这取决于你使用的字符集有多少空间,但是对于常规的英文文本(例如文档中的latin1
),每个字符只需要1个字节。因此,在latin1
字符集中,它将占用20个字节,但如果你使用非英语语言,则可能会更多。 - Jason Bakervarchar(n)
总是带有至少 2 字节的开销,因此varchar(2)
并未使用 0-2 个字节,而是使用了 2-4 个字节,而char(2)
则始终只使用 2 个字节(例如用于两字符国家代码)。所以,如果您将 16 个字符的文本存储在varchar(20)
列中,则会使用 18 个字节的存储空间。 - marc_s