MySQL

时间:2016-05-30 06:03:22

标签: mysql

我知道MySQL中的TEXT最大长度为65535个字符。

现在我创建一个表,其中一列为TEXT,并且不指定长度。因此,maxlength将为65535默认值。

但是,如果我的一条记录的TEXT列的值只有10个字符,那么为65535个字符分配的空间是否仍会被保留,或者MySQL只会占用10个字符所需的内存?

2 个答案:

答案 0 :(得分:10)

对于TEXT数据类型,它就像字符串值的实际长度(以字节为单位)+ (2字节)

manual说:

  

使用长度前缀plus存储可变长度字符串类型   数据。长度前缀需要1到4个字节,具体取决于   数据类型,前缀的值是L(字节长度为   字符串)。例如,MEDIUMTEXT值的存储需要L   用于存储值的字节加上三个字节来存储长度   值。

     

VARCHAR,VARBINARY以及BLOB和TEXT类型是可变长度的   类型。对于每种产品,存储要求取决于以下因素:

     
      
  • 列值的实际长度
  •   
  • 列的最大可能长度
  •   
  • 用于列的字符集,因为某些字符集包含多字节字符
  •   

enter image description here

答案 1 :(得分:1)

在SQL中,TEXT是一种特殊情况。字段通常存储在磁盘上以便于访问和索引,但TEXT和BLOBS往往存储(并忽略)在单独的磁盘空间块中,只有行中存储的偏移量。 因此,不需要分配额外的空间。更新该值只会导致主表存储区域内的偏移指针的单次更新,并在块中保存当前值 - 在保留足够的空间以获得最大值时,几乎没有任何方法可以获得性能。 几乎可以肯定,存储实际值以在任何给定时间占用所需的空间。另一方面,变量传统上存储在实际行中,因此分配了最大空间量。这可能已经改变,因为它们的大小增加到16位或者可能没有。