MySQL的最佳varchar大小是多少?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (13)

MySQL如何存储varchar字段?我是否可以假设以下模式表示合理的存储大小:

1,2,4,8,16,32,64,128,255(最多)

通过例子来澄清。假设我有一个20个字符的varchar字段。在创建这个字段时,MySQL是否基本上为32个字节保留了空间(不确定它们是否为字节),但只允许输入20个字节?

我想我担心的是为一个庞大的桌子优化磁盘空间。

提问于
用户回答回答于

为了回答这个问题,在磁盘上,MySQL使用字段中使用的1+大小来存储数据(因此,如果列被声明为varchar(45),并且字段是“fooBar”,那么它将在磁盘上使用7个字节,当然,除非使用多字节字符集,其中它将使用14个字节)。因此,无论如何声明列,它在存储端都不会有什么影响。但是,这确实会在查询中产生影响,因为当MySQL创建临时表(排序、订单等)时,VARCHAR被转换为CHAR,并且可以放入单个页面的记录越多,内存就越少,扫描表的速度也就越快。

用户回答回答于

MySQL将varchar字段存储为可变长度的记录,其中有一个字节或两个字节前缀来表示记录大小。

拥有存储大小的模式对MySQL在处理可变长度记录存储时的工作方式没有任何影响。varchar(X)声明中指定的长度将简单地确定可以存储的数据的最大长度。基本上,varchar(16)与varchar(128)在磁盘上没有什么不同。

这页手册有更详细的解释。

编辑:关于你最新的问题,答案仍然是一样的。varchar字段将只占用磁盘上存储的数据(加上一个或两个字节的开销)的空间。所以,如果有varchar(16)或varchar(128),那么如果在其中存储一个10字符的字符串,只需要使用10个字节(加1或2个)的磁盘空间。

扫码关注云+社区