如何MySQL的存储varchar字段?我可以假设下面的图案表示明智储存大小:

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

通过实施例A澄清。可以说我有20个字符的VARCHAR字段。确实MySQL中创建该字段时,基本上保留空间为32个字节(不知道它们是否字节或不),但只有允许输入20?

我想我很担心的一个巨大的表优化磁盘空间。

有帮助吗?

解决方案

要回答这个问题,在磁盘上的MySQL使用1 +是在该领域用于存储数据(大小,以便如果该列被宣布为varchar(45),以及场是“FooBar的”,它将使用7个字节在磁盘上,当然,除非你在哪里使用多字节字符集,在那里将使用14个字节)。所以,无论你列声明,它不会使在存储端的区别(你说你担心了巨大的表磁盘优化)。然而,这确实让在查询中的差异,为VARCHAR的转换为CHAR的当MySQL做一个临时表(SORT,顺序等)以及更多的记录,你可以放入一个单页上,更少的内存和更快的表扫描会是

其他提示

的MySQL存储varchar字段为可变长度的记录,与任一个字节或一个两字节的前缀来指示记录大小。

具有存储大小的模式并没有真正与可变长度的记录存储打交道时,MySQL将如何发挥作用的任何差异。在一个varchar(x)的声明中指定的长度将简单地确定可被存储的数据的最大长度。基本上,一个varchar(16)是没有不同的磁盘明智比一个varchar(128)。

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

编辑:至于更新的问题,答案还是一样。一个varchar字段将只使用了尽可能多的空间在磁盘上,你在它(加一个或两个开销字节)存储数据。所以,如果你有一个varchar(16)或VARCHAR(128),如果你在其中存储10个字符的字符串,你只打算使用10个字节不要紧(加1或2)的磁盘空间

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top