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"所需的数量?
查看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个字节.它实际上只对超短字段有用,在字段中始终存在完全相同的字符数.喜欢Y或N将是一个很好的CHAR(1)候选人.