varchar是可变长度的char,设定的只是字符长度最大值,但随之而来需要额外的空间开销记录长度,默认是一个字节记录长度,能记录的长度范围就是0~255(回顾下无符号字节取值范围,重点是记录的是实际字节长度)。当设置的长度超过255并且实际占用字节大于127时会使用两个字节记录长度,理论上记录的最大长度就到65535了(但实际上不可能达到,单条行记录默认最大就只支持65535,并且还要算是一些额外字节使用,所以就算只有一列,单字节字符集,也是不可能指定到65535的)。

    注意点:

    1. 业务开发尽量是保证用多少设置多少
      1. 尽量能小则小,比如一般字符集采用utf8,想无论如何都不触发用两个字节记录长度,最好控制在85以下;
      2. 不能非常小也没必要强行控制,只是记住不要过分大就行,比如直接来个10086就略显过分了,一般情况设置三五百就一样(因为只要实际字节数小于等于127还是只会用一个字节记录长度);
    2. 尽量能控制在255以下就255以下,255以上就会多一个字节维护长度哪怕只是256;
    3. 过长理论上不建议再使用varchar维护(所以一般65535这个限制是不会触碰的),可以使用text甚至是借助对象存储服务(成本往往可能更低,而且能降低数据库压力,举个例子,小说产品的小说内容);