小编典典

在 SQL 中选择 CHAR 而不是 VARCHAR 的用例是什么?

all

我意识到如果我的所有值都是固定宽度,则建议使用 CHAR。但是,那又怎样?为了安全起见,为什么不为所有文本字段选择 VARCHAR。


阅读 78

收藏
2022-05-04

共1个答案

小编典典

一般规则是如果所有行的长度 都接近,则选择 CHAR*当长度变化 很大时选择 VARCHAR (或 NVARCHAR
)。CHAR 也可能会快一点,因为所有行的长度都相同。 __
*

它因数据库实现而异,但通常 VARCHAR (或 NVARCHAR
)除了实际数据外,还使用一两个字节的存储空间(用于长度或终止)。因此(假设您使用的是单字节字符集)存储单词“FooBar”

  • CHAR(6) = 6 字节 (无开销)
  • VARCHAR(100) = 8 个字节 (2 个字节的开销)
  • CHAR(10) = 10 字节 (4 字节浪费)

底线是对于长度相对相同的数据(在两个字符长度差内), CHAR 可以 更快 、更 节省空间。

注意 :Microsoft SQL 对 VARCHAR 有 2 个字节的开销。这可能因数据库而异,但通常至少需要 1 字节的开销来指示
VARCHAR 上的长度或 EOL。

正如Gaven
在评论中指出的那样:当涉及到多字节字符集时,情况会发生变化,这是 VARCHAR 成为更好选择的情况。

关于声明的 VARCHAR 长度的注释:因为它存储实际内容的长度,所以您不会浪费未使用的长度。
因此,在VARCHAR(6)、VARCHAR(100) _或 VARCHAR(MAX)中存储 6
个字符使用相同的存储量。阅读更多关于使用VARCHAR(MAX)时的差异。您在
VARCHAR 中声明 _最大
大小以限制存储的数量。

2022-05-04