MySQL中的char / varchar / text / longtext列是否占用文件系统中的完整大小,即使对于部分填充的单元格也是如此?

时间:2016-03-28 19:17:51

标签: mysql varchar longtext tinytext

即使对于不完整的单元格,MySQL中的varchar / text / longtext列是否占用文件系统的全长大小?

参考this blog article例如,我有以下列,并且我已经在其中放入了一个给定的字符串。

CHAR (72) - can store upto 72 characters - i put in a string "abcd"
VARCHAR (72) - can store upto 72 characters - i put in a string "abcd"
TINYTEXT - can store upto 255 characters - i put in a string "abcd"
TEXT - can store upto 65,535 characters - i put in a string "abcd"
LONGTEXT - can store upto 4,294,967,295 characters - i put in a string "abcd"

每行的每个列占用多少实际物理空间?

每列能够存储的完整大小?

或者只能存储“abcd”所需的数量?

1 个答案:

答案 0 :(得分:6)

查看http://dev.mysql.com/doc/refman/5.7/en/string-type-overview.html

基本上,除CHAR之外的所有这些类型都是可变长度。

例如,如果您有VARCHAR(72)并且在其中写入abcd,则将存储5个字节。每个字符4个字节,1个字节前缀用于存储字符串的长度(即4)。

如果字符串的长度超过255个字符,则VARCHAR前缀将为2个字节。因此,存储在其中的256个字符串的VARCHAR(300)将占用258个字节。

TINYTEXT总是有一个1字节的前缀,因为你只能存储255个字符,所以abcd需要5个字节。

TEXT有一个2字节的前缀,因此abcd将是6个字节。

LONGTEXT有一个4字节的前缀,因此abcd将是8个字节。

最后,几乎没用CHAR类型。无论您在其中存储什么,CHAR(72)总是会占用72个字节。它实际上只对超短字段有用,在字段中始终存在完全相同的字符数。与YN一样,CHAR(1)候选人也不错。