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

Do char / varchar / text / longtext columns in MySQL occupy full size in filesystem even for partially filled cells?

即使对于不完整的单元格,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"

这些列中的每一列在一行中将占用多少实际物理空间 space?

每列能够存储的最大大小?

或者仅存储所需的量"abcd"?

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

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

例如,如果您有VARCHAR(72),您将abcd写入其中,您将存储5个字节。每个字符 4 个字节,以及一个 1 字节的前缀来存储字符串的长度(即 4)。

如果字符串长度超过255个字符,则VARCHAR前缀为2个字节。所以一个VARCHAR(300)里面存储了256个字符串会占用258个字节。

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

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

LONGTEXT 有一个 4 字节前缀,所以 abcd 将是 8 个字节。

最后,还有几乎没用的 CHAR 类型。 CHAR(72) 无论你在其中存储什么,它总是会占用 72 个字节。它实际上仅对超短字段有用,因为字段中的字符数始终完全相同。像 YN 将是一个很好的 CHAR(1) 候选人。