有没有理由使用TINYTEXT?

时间:2016-03-02 23:17:11

标签: mysql database varchar sqldatatypes tinytext

据我所知,VARCHAR(255)可以完成TINYTEXT所能做的一切。 VARCHAR具有相同的存储大小,它是ISO标准的一部分,它允许除null之外的默认值。我看不出有任何理由使用TINYTEXT。但它存在,所以也许是有原因的。

是否存在TINYTEXT是尺寸,速度或其他考虑因素的首选数据类型的情况?

2 个答案:

答案 0 :(得分:5)

我能想到TINYTEXT可能有用的唯一情况是,如果你有真的大行。 VARCHAR列的内容计入最大行大小65,535字节,但TEXTBLOB数据不计; TINYTEXT列只会在行大小上添加1个字节。

实际上,对于InnoDB表,事情有点复杂。 InnoDB存储在以下页面中描述:

https://dev.mysql.com/doc/refman/5.7/en/innodb-physical-record.html https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format-dynamic.html https://dev.mysql.com/doc/refman/5.7/en/innodb-compression-internals.html

总而言之,存储在符合上述TINYTEXT限制的表格部分中的数据由1字节长度字段和20字节指向外部数据的指针组成,因此{{1向行长度添加21个字节。但是,当外部值小于40个字节时,数据将内联存储在行中。因此,对于少于40个字节的TINYTEXT,存储类似于TINYTEXT,并且它都是根据行长度限制计算的。

答案 1 :(得分:3)

TINYTEXT基本没用。它可能存在一致性(TEXTBLOB的4种大小。早在TINYTEXT可能有超过255个字符且字符可能超过一个字节之前,MySQL中就存在VARCHAR

TINYTEXT实际上比VARCHAR有缺点。复杂SELECT可能需要创建一个tmp表(例如,ORDER BY);第一个偏好是使用MEMORY。后备效率较低MyISAM。任意大小TEXTBLOB强制直接转到MyISAM

差异VARCHAR中的数字是字符; TEXT尺寸以字节衡量。 utf8 字符最多可占用3个字节

底线:不要使用TINYTEXT。 (或TINYBLOB,可由VARBINARY(...)替换。)