varchar(255)vs tinytext / tinyblob和varchar(65535)vs blob / text


91

根据定义:

VARCHAR:长度范围是1到255个字符。除非指定BINARY关键字,否则VARCHAR值将以不区分大小写的方式进行排序和比较。x + 1个字节
TINYBLOB,TINYTEXT:BLOB或TEXT列,最大长度为255(2 ^ 8-1)个字符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 BLOB或TEXT列,最大长度为65535(2 ^ 16-1)个字符x + 2字节


VARCHAR需要较少的内存开销,但是它们通常会在内存中完全读取,因此最后VARCHAR可能仍会使用更多的内存。他们都是不同的。您可以使用BLOB来存储二进制数据,例如图像,音频和其他多媒体数据。和VARCHAR可以存储最大大小的文本。
宙斯之书

Answers:


10

在这种情况下varchar更好。

请注意,它varchar可以是1到65535个字符。

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

Blob保存在文件的单独部分中。
它们需要额外的fileread才能包含在数据中。
因此,varchar的获取速度要快得多。

如果您不经常访问较大的Blob,则比Blob更有意义。
将Blob数据存储在单独的文件(的一部分)中,可以使核心数据文件更小,从而可以更快地获取。


是否更好取决于您的数据访问模式。
Michael Mior

1
那可能是哪个单独的文件?
glglgl 2011年

1
Blob不会保存在单独的文件中。但是它们存储在与其余各列不同的物理位置中。
Michael Mior

1
请注意,这不仅取决于访问频率,还取决于对数据执行的操作。例如,任何需要进行表扫描的查询(无论如何通常都是不好的),但是由于要扫描的数据量较大,因此不会使文本列变得更糟。
Michael Mior

1
我还怀疑,如果将数据存储在页面外,则不使用此列的文件排序可能会更有效,尽管我不确定查询优化器是否足够聪明以至于无法提取此数据。
Michael Mior
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.