varchar(255)与tinytext/tinyblob,以及varchar(65535)与blob/text的区别

102

根据定义:

VARCHAR:长度范围为1到255个字符。VARCHAR值按不区分大小写的方式排序和比较,除非给出BINARY关键字。 x+1个字节
TINYBLOB,TINYTEXT:最大长度为255(2^8 - 1)个字符的BLOB或TEXT列 x+1个字节

因此,基于此,我创建了以下表:

CREATE TABLE `user` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255),
  `lastname` tinytext,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1

创建一个varchar或tinytext哪个更好?为什么

对于下列情况是否一样:

VARCHAR: 长度范围大于255个字符。除非使用BINARY关键字,否则VARCHAR值以不区分大小写的方式进行排序和比较。x+2字节
BLOB, TEXT 最大长度为65535(2^16 - 1)个字符的BLOB或TEXT列 x+2 字节


1
VARCHAR需要更少的内存开销,但它们通常会完全读入内存,因此最终VARCHAR可能仍然使用更多的内存。它们是不同的。您可以使用BLOB来存储二进制数据,如图像、音频和其他多媒体数据,而使用VARCHAR来存储任何大小的文本,直到达到限制为止。 - Book Of Zeus
1个回答

15
在这种情况下,使用varchar更好。 请注意,varchar的长度可以是1到65535个字符。

VARCHAR列中的值是可变长度字符串。 在MySQL 5.0.3之前,长度可以指定为0到255的值,在5.0.3和以后的版本中,长度可以指定为0到65,535。在MySQL 5.0.3及以后的版本中,VARCHAR的有效最大长度取决于最大行大小(65,535字节,共享所有列)和所使用的字符集。请参见第E.7.4节“表列数和行大小限制”。

Blobs保存在文件的单独部分中。 它们需要额外的文件读取才能包含在数据中。 因此,使用varchar获取更快。
如果您有一个访问不频繁的大型Blob,则使用Blob更合适。 将Blob数据存储在单独的(部分)文件中使您的核心数据文件更小,因此更快速地获取。

1
这是否更好取决于您的数据访问模式。 - Michael Mior
1
那可能是哪个单独的文件? - glglgl
1
Blob不会保存在单独的文件中,但它们会存储在与其他列分开的物理位置。 - Michael Mior
2
请注意,这不仅取决于访问频率,还取决于对数据执行的操作。例如,任何需要进行表扫描(通常情况下都很糟糕)但不需要文本列的查询将因扫描的数据量更大而变得更糟。 - Michael Mior
1
我还怀疑如果数据存储在页外,不使用该列的文件排序可能更有效,尽管我不确定查询优化器是否足够聪明,不会提取这些数据。 - Michael Mior
显示剩余6条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接