为数据类型分配的大小

时间:2012-09-03 10:12:32

标签: mysql

如果我在chacharet latin1上设置varchar(250),当我添加一个值时说'abc'字符是否意味着为它分配的数据是251bytes还是4bytes?对于其他数据类型,它会是一样的吗?请指教?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

MySQL手册有一个完整的chapter on storage requirements

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

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

指数可能会增加内存需求。多字节字符集(包括UTF-8)可能会增加内存需求,因此只有在为latin1或类似的表创建表时,上述语句才会成立。