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 个字节。它实际上仅对超短字段有用,因为字段中的字符数始终完全相同。像 Y
或 N
将是一个很好的 CHAR(1)
候选人。
即使对于不完整的单元格,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 个字节。它实际上仅对超短字段有用,因为字段中的字符数始终完全相同。像 Y
或 N
将是一个很好的 CHAR(1)
候选人。