关于text和varchar的磁盘空间差异

时间:2013-03-25 11:05:06

标签: mysql database

这两个字段存在一些磁盘空间差异:TEXT和VARCHAR?

我需要使用一个字段来存储URL,但我的托管支持varchar最多可以存储333个字符。

这是我的表:

  CREATE TABLE IF NOT EXISTS `urls` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `n_id` int unsigned NOT NULL DEFAULT '0',
  `first_citizen_id` int unsigned NOT NULL DEFAULT '0',
  `title_citizen` varchar(128) NOT NULL,
  `title_source` varchar(255) NOT NULL,
  `link` varchar(333) NOT NULL DEFAULT '',
  `link_image` varchar(333) NOT NULL DEFAULT '',
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`),
  UNIQUE KEY `link` (`link`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

2 个答案:

答案 0 :(得分:1)

来自Data Type Storage Requirements章节:

  

在下表中,M表示声明的列长度   非二进制字符串类型的字符和二进制字符串的字节   类型。 L表示给定字符串的实际长度(以字节为单位)   值。

     

VARCHAR(M), VARBINARY(M)如果列值需要0 - 255,则L + 1个字节   如果值可能需要超过255个字节,则为字节,L + 2个字节

     

BLOB, TEXT L + 2个字节,其中L <1。 2 16

无论如何,我很确定您的托管服务不限制任何内容。您可能有一个包含大量大列的表,只需点击maximum row size

答案 1 :(得分:0)

是的 Text是指向包含它的系统表和其他类型的Blob(二进制大对象)的指针。 所以你有指针的开销,每个非空文本字段4或8个字节。