MySQL如何存储varchar字段?我可以假设以下模式表示合理的存储大小:
1,2,4,8,16,32,64,128,255(最大)
通过示例澄清.假设我有一个20个字符的varchar字段.MySQL在创建这个字段时,基本上保留了32个字节的空间(不确定它们是否为字节)但只允许输入20个字节?
我想我担心为大型表优化磁盘空间.
Kri*_*son 56
要回答这个问题,在磁盘上MySql使用1 +字段中用于存储数据的大小(因此,如果列声明为varchar(45),并且字段为"FooBar",则它将在磁盘上使用7个字节,当然,除非您使用多字节字符集,否则它将使用14个字节).因此,无论您声明列,它都不会对存储端产生影响(您表示您担心大型表的磁盘优化).但是,它确实会对查询产生影响,因为当MySql创建临时表(SORT,ORDER等)时,VARCHAR会转换为CHAR,并且您可以将更多记录放入单个页面中,内存越少,表扫描速度越快是.
zom*_*bat 24
MySQL将varchar字段存储为可变长度记录,使用一个字节或两个字节的前缀来指示记录大小.
拥有存储大小模式对于MySQL在处理可变长度记录存储时的运行方式并没有任何影响.varchar(x)声明中指定的长度将简单地确定可以存储的数据的最大长度.基本上,varchar(16)与varchar(128)的磁盘方式没有区别.
本手册页有更详细的解释.
编辑:关于您更新的问题,答案仍然是相同的.varchar字段只会占用磁盘上与存储在其中的数据一样多的空间(加上一个或两个字节的开销).因此,如果你有一个varchar(16)或一个varchar(128)并不重要,如果你在其中存储一个10个字符的字符串,你将只使用10个字节(加上1或2个)的磁盘空间.