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

Mysql 关于text和varchar的磁盘空间差异,mysql,database,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 DEFAU

这两个字段的磁盘空间有些不同: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 ;
本章:

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

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

BLOB,TEXT
L+2字节,其中L<216

不管怎样,我很确定你的托管服务并没有限制任何东西。您可能有一个包含许多大列的表,只需点击按钮即可。

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

请准确解释您正在做什么,想做什么,并给出您收到的确切错误消息。我需要使用一个字段来存储URL,但我的主机支持varchar最多333chars。所以我可以使用一个文本字段,但它可能会占用更多的磁盘空间,在这种情况下,这对我来说不是一个好的解决方案。仅此而已:)单击问题下方的“编辑”进行更新。您的托管服务是如何限制VARCHAR的最大大小的,即65535的?他们编译自定义的修改过的MySQL版本只是为了惹恼客户吗?我不知道是什么问题,但我得到了一个错误:“#1071-指定的密钥太长;最大密钥长度为1000字节”。上面我已经插入了表,请看:(你是对的:D但是现在我如何使用varchar(1000)字段呢?我已经插入了上面的表,请看:(@xRobot-那么,当你创建一个表时,
varchar(333)
被替换为例如
varchar(2048)