什么是MySQL的最佳varchar大小?

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

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

通过例子来澄清。 可以说我有一个20个字符的varchar字段。 MySQL创build这个字段时,基本上保留了32字节的空间(不确定它们是否是字节),但只允许input20个字节?

我想我很担心优化大型表的磁盘空间。

为了回答这个问题,在磁盘上,MySql使用1 +在字段中用来存储数据的大小(所以如果列被声明为varchar(45),并且字段是“FooBar”,它将使用磁盘上的7个字节,除非你使用多字节字符集的地方,它将使用14字节)。 所以,无论你声明你的列,它不会在存储上有所作为(你说你担心磁盘优化大表)。 然而,它确实在查询上有所不同,因为当MySql创build临时表(SORT,ORDER等)时,VARCHAR被转换为CHAR,并且可以放入单个页面的logging越多,内存越less,表扫描速度越快是。

MySQL将一个varchar字段存储为一个可变长度logging,用一个字节或一个两字节前缀来表示logging大小。

在处理可变长度logging存储时,具有存储大小的模式并不会真正改变MySQL的function。 在varchar(x)声明中指定的长度将简单地确定可以存储的数据的最大长度。 基本上,一个varchar(16)是没有什么不同的磁盘上比varchar(128)。

本手册页面有更详细的解释。

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