我应该根据实际长度或 2 的 n 次方(Sql 服务器)定义列类型吗?

Should I define a column type from actual length or nth power of 2(Sql Server )?

我应该定义一个从实际长度到2的n次方的列类型吗?

The first case, I have a table column store no more than 7 charactors, will I use NVARCHAR(8)? since there maybe implicit convert inside Sql server, allocate 8 space and truncate automatic(heard some where).

如果不是,NCHAR(7)/NCHAR(8),应该是(假设定长为7)

关于这 2 个案例,性能有什么不同吗?

您应该使用字符串的实际长度。现在,如果您知道该值 始终恰好是 7 个字符,那么请使用 CHAR(7) 而不是 VARCHAR(7)

您看到 2 的幂的原因是列的长度不确定——名称或描述可能不固定。在大多数数据库中,您需要为 varchar() 输入一些最大长度。由于历史原因,2 的幂被用于此类事情,因为底层 CPU 的二进制性质。

尽管在这些情况下我几乎总是使用 2 的幂,但我认为没有真正的性能差异。有一个。 . .在某些数据库中,varchar(255) 的实际长度使用 1 个字节存储,而 varchar(256) 使用 2 个字节。这是一个非常小的差异——即使乘以数百万行。