我是MySQL新手。关于数据类型的内存分配,我有点困惑。如果我将类型初始化为bigint则需要8个字节的内存。如果我初始化bigint(10)那么它需要80个字节或相同的8个字节有限制。在数据类型上初始化10的用途是什么?而且我也对varchar感到困惑。 varchar(10)和varchar(100)的内存大小是多少?它的内存大小会有所不同吗?我正在使用InnoDB引擎。
答案 0 :(得分:2)
如果不是NULL
,则数字数据类型会占用一定的空间。
VARCHAR(n)
占用1或2个字节的长度,加上你拥有的多个字符的空间 - 最多n
。注意:我说"字符",不是"字节"。对于ascii
和latin1
,一个字符占用一个字节。但对于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
。