MySQL数据类型中的内存分配?

时间:2015-12-29 09:27:11

标签: mysql sql memory sqldatatypes

我是MySQL新手。关于数据类型的内存分配,我有点困惑。如果我将类型初始化为bigint则需要8个字节的内存。如果我初始化bigint(10)那么它需要80个字节或相同的8个字节有限制。在数据类型上初始化10的用途是什么?而且我也对varchar感到困惑。 varchar(10)和varchar(100)的内存大小是多少?它的内存大小会有所不同吗?我正在使用InnoDB引擎。

1 个答案:

答案 0 :(得分:2)

如果不是NULL,则数字数据类型会占用一定的空间。

VARCHAR(n)占用1或2个字节的长度,加上你拥有的多个字符的空间 - 最多n。注意:我说"字符",不是"字节"。对于asciilatin1,一个字符占用一个字节。但对于utf8,一个字符最多 3个字节。

VARCHAR(10) CHARACTER SET utf8将占用1个字节(对于空字符串)和32个字节 VARCHAR(100) CHARACTER SET utf8将占用2个字节和302个字节 VARCHAR(255) CHARACTER SET utf8将占用2个字节和767个字节。

CHAR(10) CHARACTER SET utf8将始终占用30个字节。因此,VARCHAR通常是比CHAR更好的选择。

NULL是特殊的,几乎没有空间。相关评论:我应该使用... NOT NULL并使用''吗?或使用NULLs?空间差异不如语义重要。适用于您的应用时,请使用NULL