首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >varchar(255)或varchar(256)?

varchar(255)或varchar(256)?
EN

Database Administration用户
提问于 2017-08-11 17:05:21
回答 1查看 47.1K关注 0票数 34

在设计表格时,我应该使用varchar(255)还是varchar(256)?我听说一个字节用于列的长度,或者用来存储元数据。

在这一点上还重要吗?

我在互联网上看到了一些帖子,但它们适用于甲骨文和MySQL。

我们有MicrosoftSQLServer2016EnterpriseEdition,它如何应用于这个环境?

例如,如果我告诉我的客户端保留255个字符的文本描述,而不是256个字符,这有什么区别吗?我所读到的“最大长度为255个字符,DBMS可以选择使用一个字节来表示字段中数据的长度,如果限制为256或更大,则需要两个字节。”这是真的吗?

EN

回答 1

Database Administration用户

发布于 2017-08-11 18:39:01

其他人已经指出,存储长度所需的字节数是固定的。我想在你的问题中把重点放在这部分:

在这一点上还重要吗?

您的问题有企业版标记,这通常意味着您将拥有相当数量的数据。通常,每行一个字节的差异在实践中并不重要。例如,具有完全填充的VARCHAR(255)列的下表占用磁盘上143176 KB的空间:

代码语言:javascript
复制
DROP TABLE IF EXISTS dbo.V255_FULL;

CREATE TABLE dbo.V255_FULL (
    ID1 BIGINT NOT NULL,
    ID2 BIGINT NOT NULL,
    V255 VARCHAR(255)
);

INSERT INTO dbo.V255_FULL WITH (TABLOCK)
SELECT TOP (500000) 0, 0, REPLICATE('A', 255)
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;

EXEC sp_spaceused 'V255_FULL';

结果:

代码语言:javascript
复制
╔═══════════╦══════════════════════╦═══════════╦═══════════╦════════════╦════════╗
║   name    ║         rows         ║ reserved  ║   data    ║ index_size ║ unused ║
╠═══════════╬══════════════════════╬═══════════╬═══════════╬════════════╬════════╣
║ V255_FULL ║ 500000               ║ 143176 KB ║ 142888 KB ║ 8 KB       ║ 280 KB ║
╚═══════════╩══════════════════════╩═══════════╩═══════════╩════════════╩════════╝

让我们使用一个完全填充的VARCHAR(256)列创建第二个表。每行至少需要一个字节,对吧?

代码语言:javascript
复制
DROP TABLE IF EXISTS dbo.V256_FULL;

CREATE TABLE dbo.V256_FULL (
    ID1 BIGINT NOT NULL,
    ID2 BIGINT NOT NULL,
    V256 VARCHAR(256)
);

INSERT INTO dbo.V256_FULL WITH (TABLOCK)
SELECT TOP (500000) 0, 0, REPLICATE('A', 256)
FROM master..spt_values t1
CROSS JOIN master..spt_values t2;

EXEC sp_spaceused 'V256_FULL';

结果:

代码语言:javascript
复制
╔═══════════╦══════════════════════╦═══════════╦═══════════╦════════════╦════════╗
║   name    ║         rows         ║ reserved  ║   data    ║ index_size ║ unused ║
╠═══════════╬══════════════════════╬═══════════╬═══════════╬════════════╬════════╣
║ V256_FULL ║ 500000               ║ 143176 KB ║ 142888 KB ║ 8 KB       ║ 280 KB ║
╚═══════════╩══════════════════════╩═══════════╩═══════════╩════════════╩════════╝

只是碰巧这两个表占用了相同的空间。每个8k页上的行数相同。您想花时间优化您的应用程序是很好的,但是我怀疑您最好关注不同的领域。

票数 25
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/183275

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档