例如,如果我在PHP中有一个通过更改表更改列并设置新长度来更新长度的代码,将其更改为有史以来最长的记录,那么如果我有10000条记录,这会极大地影响吗?
即使旧数据较短,MySQL也会为新大小的每条记录重新分配内存空间吗?
这个问题是MySQL特有的
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表示问候,1表示长度),因此更改varchar列的大小不会像分配char类型那样分配更多的存储空间。
现在真正的问题是,为什么要让PHP操纵varchar大小?您应该指定大小是有原因的,如果您想要一个可变长度字段,可以容纳很多文本(超过65,535个字节)并且是动态的,因此它仅使用所需的最小空间,也许TEXT类型可能更适合您的情况?
| 归档时间: |
|
| 查看次数: |
1628 次 |
| 最近记录: |