即使对于不完整的单元格,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”所需的数量?
答案 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个字节。它实际上只对超短字段有用,在字段中始终存在完全相同的字符数。与Y
或N
一样,CHAR(1)
候选人也不错。