首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >VARCHAR大小限制重要吗?

VARCHAR大小限制重要吗?
EN

Stack Overflow用户
提问于 2010-12-01 21:35:53
回答 7查看 25.6K关注 0票数 28

可能重复:

Importance of varchar length in MySQL table

在使用VARCHAR时(假设这是一个短字符串的正确数据类型),大小有关系吗?如果我将其设置为20个字符,会占用更少的空间还是比255个字符更快?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-12-01 21:44:29

通常,对于VARCHAR字段,每个字段中存储的数据量决定了它在磁盘上的占用空间,而不是最大大小(不像CHAR字段总是具有相同的占用空间)。

存储在900字节(900 byte index size limit in character length)索引的所有字段中的总数据有上限。

您将字段设置得越大,人们就越有可能尝试将其用于您预期之外的目的--而且显示数值所需的屏幕空间也越大--因此,最好尝试选择合适的大小,而不是假设如果您将其设置得尽可能大,就可以省去重新设计的麻烦。

票数 14
EN

Stack Overflow用户

发布于 2010-12-01 21:44:26

是的,当您为多个列建立索引时,很重要。

前缀的长度最大可达1000字节(对于InnoDB表,长度为767字节)。请注意,前缀限制是以字节为单位测量的,而CREATE TABLE语句中的前缀长度被解释为字符数。为使用多字节字符集的列指定前缀长度时,一定要考虑到这一点。

来源:http://dev.mysql.com/doc/refman/5.0/en/column-indexes.html

在latin1排序规则中,最多只能指定3列varchar(255)

而最多可以为varchar(20)指定50列

如果没有适当的索引,间接地,它将减慢查询速度

在存储方面,它没有什么不同,

as varchar代表variable-length strings

票数 16
EN

Stack Overflow用户

发布于 2010-12-01 21:41:09

实际的区别是:

VARCHAR TINYTEXT和其他文本字段与内存中的行分开存储在MySQL堆中,而VARCHAR()字段加起来有64k的限制(因此您可以在TINYTEXT中使用64k以上的内容,而使用VARCHAR).

  • TINYTEXT和其他类似blob的字段将强制 layer (MySQL)在使用时使用磁盘上的临时表,而VARCHAR仍将被排序为“在内存中”(尽管将转换为全宽度的CHAR )。
  • InnoDB在内部并不真正关心它是tinytext还是varchar。很容易验证,创建两个表,一个使用VARCHAR(255),另一个使用TINYINT,并向这两个表中插入一条记录。它们都将占用单个16k的页面-而如果使用溢出页面,TINYTEXT表应该显示为在“show table STATUS”中至少占用32k。

我通常更喜欢VARCHAR(255) -它们不会对单行造成太多的堆碎片,并且可以在MySQL中作为内存中的单个64k对象处理。在InnoDB上,大小差异可以忽略不计。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4324872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档