MySQL如何存储varchar字段?我可以假设以下模式代表合理的存储大小:
1,2,4,8,16,32,64,128,255(最大)
通过示例进行说明。可以说我有20个字符的varchar字段。MySQL在创建此字段时是否基本上保留32个字节的空间(不确定是否为字节),但只允许输入20个字节?
我想我担心优化大型表的磁盘空间。
Answers:
为了回答这个问题,在磁盘上MySql使用1 +字段中用于存储数据的大小(因此,如果将该列声明为varchar(45),并且该字段为“ FooBar”,则它将在磁盘上使用7个字节,除非您当然使用多字节字符集,否则将使用14个字节)。因此,尽管您声明了列,但不会在存储端有所作为(您说过您担心大型表的磁盘优化)。但是,它确实在查询中有所不同,因为当MySql创建临时表(SORT,ORDER等)时,VARCHAR转换为CHAR,并且可以在单个页面中容纳的记录越多,表扫描所需要的内存越少且速度越快是。
MySQL将varchar字段存储为可变长度记录,并以一字节或两字节为前缀来指示记录大小。
拥有存储大小模式并不会真正改变MySQL处理可变长度记录存储的方式。在varchar(x)声明中指定的长度将仅确定可以存储的数据的最大长度。基本上,varchar(16)在磁盘方向上与varchar(128)没有什么不同。
本手册页有更详细的说明。
编辑:关于您更新的问题,答案仍然是相同的。varchar字段将仅使用磁盘上存储的数据所占用的磁盘空间(加上一或两个字节的开销)。因此,无论您使用的是varchar(16)还是varchar(128),如果在其中存储10个字符的字符串,您将只使用10个字节(加上1或2)的磁盘空间。