我数据库的一列存储一个长文本。大多数文本小于TEXT的限制(64KB)。但是,其中约0.1%是长文本(> 64KB)。最初,我使用TEXT作为列数据类型,而我不得不忽略带有长文本的条目。但是,如果我使用LONGTEXT作为数据类型,则会发现数据库大小增加了一倍。带有长文本的条目的总大小应比带有普通文本的条目的总大小小得多。

TEXT和LONGTEXT是否有某种“最小大小”,使具有LONGTEXT数据类型的每个条目大于具有TEXT数据类型的条目,并导致存储差异?

更具体地说,具有TEXT数据类型的一项大约需要1KB。 LOnGTEXT的一项大约需要2KB。

我正在使用innoDB,其他列的类型为:

varchar(50)
整数(10)
varchar(70)
varchar(12)
varchar(7)
varchar(50)
varchar(50)
约会时间

最佳答案

MySQL内联存储BLOB数据(包括TEXTLONGTEXT),并以字节计数作为前缀。 TEXT以2字节的前缀存储该计数,因此它最多可以存储2 ^ 16-2字节的信息。 LONGTEXT将计数存储在一个四字节的前缀中,因此它最多可以存储2 ^ 32-4字节的信息。

将字段存储为LONGTEXT不会自动导致数据库大小增加一倍,因为唯一增加一倍的是前缀大小。但是,将其从TEXT更改为LONGTEXT的大小在理论上可能会增加一倍,因为MySQL会在更改信息时复制信息,并且在完成后不会自动释放信息。

10-04 12:41