0

如果我在 charset latin1 上设置 varchar (250) say 当我添加一个值 say 'abc' 字符时,这是否意味着为其分配的数据是 251 字节或 4 字节?其他数据类型也会这样吗?请指教?

4

2 回答 2

1

当您有一个 varchar(250) 并添加 'abc' 时,将分配 3 个字节/字符。如果您有用户 char(250),则将分配 250 个字节/字符。

请注意,对于 VARCHAR,内部使用最小的存储开销来表示数据类型。

于 2012-09-03T10:15:27.973 回答
1

MySQL 手册有一整章是关于存储要求的。

AVARCHAR(250) NOT NULL用一个字节来存储长度n,用n个字节来存储实际的字符串。因此,保存一个值的列'abc'将占 4 个字节。在 aVARCHAR(250) NULL中,nullity 占用一位,而NULLvalue 不会占用其他任何内容。非空值占用该位,长度为一个字节,数据为n个字节。这里需要一点意味着几个可为空的列共享一个或多个字节来记录它们的空值。

其他可变长度数据类型类似。各种大小的 BLOB 和 TEXT 类型的长度可能不止一个字节,但在其他方面的工作方式几乎相同。数字类型以及固定长度CHAR类型具有固定的内存要求。我想我CHAR会省略长度字节,因为它的内容用空格填充到该固定长度。

索引可能会增加内存需求。多字节字符集(包括 UTF-8)可能会增加内存要求,因此上述语句仅在您的表是为 latin1 或类似文件创建时才成立。

于 2012-09-03T11:48:04.747 回答