列类型 | 需要的存储量 |
CHAR(M) |
M 字节,1 <= M <= 255 |
VARCHAR(M) |
L +1 字节, 在此L <= M 和1 <= M <= 255 |
TINYBLOB , TINYTEXT |
L +1 字节, 在此L < 2 ^ 8 |
BLOB , TEXT |
L +2 字节, 在此L < 2 ^ 16 |
MEDIUMBLOB , MEDIUMTEXT |
L +3 字节, 在此L < 2 ^ 24 |
LONGBLOB , LONGTEXT |
L +4 字节, 在此L < 2 ^ 32 |
ENUM('value1','value2',...) |
1 或 2 个字节, 取决于枚举值的数目(最大值65535) |
SET('value1','value2',...) |
1,2,3,4或8个字节, 取决于集合成员的数量(最多64个成员) |
VARCHAR
和BLOB
和TEXT
类型是变长类型,对于其存储需求取决于列值的实际长度(在前面的表格中用L
表示),而不是取决于类型的最大可能尺寸。例如,一个VARCHAR(10)
列能保存最大长度为10个字符的一个字符串,实际的存储需要是字符串的长度(L
),加上1个字节以记录字符串的长度。对于字符串'abcd'
,L
是4而存储要求是5个字节。
BLOB
和TEXT
类型需要1,2,3或4个字节来记录列值的长度,这取决于类型的最大可能长度。
如果一个表包括任何变长的列类型,记录格式将也是变长的。注意,当一个表被创建时,MySQL可能在某些条件下将一个列从一个变长类型改变为一个定长类型或相反。见7.7.1 隐式列指定变化。
一个ENUM
对象的大小由不同枚举值的数量决定。1字节被用于枚举,最大到255个可能的值;2个字节用于枚举,最大到65535 值。
一个SET
对象的大小由不同的集合成员的数量决定。如果集合大小是N
,对象占据(N+7)/8
个字节,四舍五入为1,2,3,4或8 个字节。一个SET
最多能有64个成员。