0

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

例如,参考这篇博客文章,我有以下列,并且我在其中放入了一个给定的字符串。

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”所需的数量?

4

1 回答 1

7

查看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)无论您在其中存储什么,A都将始终占用 72 个字节。它仅对字段中始终存在完全相同数量的字符的超短字段有用。喜欢YN将是一个很好的CHAR(1)候选人。

于 2016-03-28T19:27:25.663 回答