如果我将列设置为varchar(50),请用长度为20的字符串更新它。然后OPTIMIZE吧。如果我用一个超过20的字符串更新它会发生什么,比如说30?
(因为优化应该可以消除varchars上的多余行李......)
第二个问题:如果我有一个varchar(50)和一个包含51个字符的字符串的UPDATE会怎样?
第三个问题:这里的手册不清楚,但varchar的最大最佳字符串大小是多少?它是256或254(因为它需要额外的2个字节)还是别的什么?
“与CHAR相比,VARCHAR值存储为一个字节或 两字节长度前缀加数据。该 length前缀表示的数量 值中的字节数。一列使用一个 如果值不再需要,则为length 超过255个字节,两个长度字节if 值可能需要超过255 字节“。
感谢。
答案 0 :(得分:0)
优化不会消除多余的行李,它只是像窗口碎片整理一样清理磁盘空间以进行大量删除 - details。如果你用一个长度为30的字符串进行更新,mysql就会存储为什么,只需存储就可以了,
如果用51更新字符串,最后一个字符将被剪切/截断
这不是varchar的最佳字符串大小,在很大程度上取决于您的应用程序使用情况,以及您如何使用mysql索引。最大varchar(255)
仍保留为字符串,长度为255