0

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

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

这是我的桌子:

  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 ;
4

2 回答 2

1

数据类型存储要求一章:

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

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

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

无论如何,我很确定您的托管服务不会限制任何事情。您可能有一个包含许多大列的表,并且刚刚达到最大行大小

于 2013-03-25T12:26:17.327 回答
0

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

于 2013-03-25T13:59:04.407 回答