这两个字段存在一些磁盘空间差异: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 ;
答案 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个字节。