在mysql中更改varchar的长度有什么影响?

时间:2014-12-27 21:21:03

标签: mysql

例如,如果我在PHP中有一个代码,通过alter table change列更新长度并设置新的长度,那么如果我有10000条记录,那么这会影响很大吗?

即使旧数据较短,MySQL是否会为新大小的每条记录重新分配内存空间?

这个问题是MySQL特定的

1 个答案:

答案 0 :(得分:4)

varchar列的长度固定为创建表时声明的长度。长度可以是0到255之间(MySQL 5.0.3之前)和0到65,535之间的任何值(在MySQL 5.0.3及更高版本中)。

varchar的存储是数据的字节,加上一个或两个字节来声明字符串的长度。如果最大长度为255或更小,则仅添加1个字节的长度。

如果您使用alter table并更改最大长度,那么如果定义的最大长度低于255,则不会影响数据存储大小。如果您将最大长度增加到255以上,那么如果它强制它将由存储引擎决定对于低于255的值,是否为两个字节,在这种情况下,每行将增加1个字节。

char类型与varchar不同,因为char总是使用所需的空间,所以如果你有char(10)和varchar(10)但每个只存储“hello”,char将使用所有10个字节,vharchar将保持6个字节(5个用于hello,1个用于长度),因此更改varchar列的大小不会像使用char类型那样分配更多的存储空间。

现在真正的问题是为什么要让PHP操纵varchar大小?你应该指定一个原因的大小,如果你想要一个可以容纳大量文本(超过65,535字节)的可变长度字段并且也是动态的,那么它只使用所需的最小空间,也许TEXT类型可能更适合你的情况?