正如文档所说,mysql不会分配您为varchar指定的完整空间。它存储实际的数据长度。所以我猜可能还有副作用。就像varchar记录的原始长度是10一样,现在我想将它更新为20但仍未达到指定的限制50.但是,之前分配的空间现在还不够。 所以我的问题是MySQL如何处理这样的情况?在记录之后移动所有内容需要很长时间吗?还是必须这样做? 有没有人可以告诉我它内部是如何工作的?提前谢谢!
答案 0 :(得分:1)
MySQL处理得很好,你不应该关注细节。尽管具有不规则长度记录的管理速度比具有固定长度的记录要慢一些,但如果您的记录通常小于固定大小,则通过读取显着更少的数据可以获得巨大的性能提升。
请记住,始终以最大大小存储和检索CHAR
列。即使平均记录只有10-15个字节的数据,255个字符的字段也需要传输255个字节。这是一笔巨大的开销。
使用CHAR
会出现许多其他问题,因为该字段始终是该长度,这意味着它必须完整地传输,并且通常在客户端中被剥离。这比它的价值更麻烦。
CHAR
列在现代时代的唯一用途是用于始终定义并始终具有特定大小的内容。一个例子可能是用作标识符的40个字符的十六进制编码哈希值,但这些哈希值通常很少见,几乎在所有情况下VARCHAR
都可以使用。