我应该根据实际长度或 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 个字节。这是一个非常小的差异——即使乘以数百万行。
我应该定义一个从实际长度到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 个字节。这是一个非常小的差异——即使乘以数百万行。