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

Rak*_*kib 0 mysql varchar longtext tinytext

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"
Run Code Online (Sandbox Code Playgroud)

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

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

或者只有存储"abcd"所需的数量?

JNe*_*ill 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个字节.因此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)候选人.