我个人是一直用 2 的每次方进行设计 varchar 的长度,其他的比如 bigint:20 int:4
我也搜了下网上的回答: char, varchar 类型的值,会有一个长度标识位来存值长度。 当定义 varchar 长度小于等于 255 时,长度标识位需要一个字节; 当大于 255 时,长度标识位需要两个字节
|      1billlee      2022-11-27 15:13:02 +08:00 真要抠这点细节,那要看整个表的一行有多大,凑成页面大小。 | 
|  |      2eason1874      2022-11-27 16:08:34 +08:00  8 看你要不要索引,要索引的话,191 比较常用,你可以看到很多开源项目都是 varchar(191) MySQL 以前的 utf8 只支持到三字节,5.7.7 之前版本的 InnoDB varchar 索引长度是 255 * 3 ,要兼容四字节 utf8mb4 的话就是 (255 * 3) / 4 = 191.25 ,取整数就是 191 | 
|      3Leviathann      2022-11-27 16:38:30 +08:00 索引有 767 长度限制 如果是 3bytes 字符集就是 255 如果是 4bytes 就是 191 | 
|  |      4jaoyina      2022-11-27 17:12:22 +08:00  1 字段不要太多,我碰到总字节数不能超过 65535 的问题,导致建表失败。 | 
|  |      50xLittleFi OP @eason1874 其他的字段呢,比如 int  bigint 啥的,也同样有说法? | 
|  |      6eason1874      2022-11-27 20:56:31 +08:00  1 @0xLittleFi  其他的没听过,可以看这个页面 https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html 我记错了,我之前不知道在哪儿看到说新版没有 767 限制了,但是文档看起来新版默认还是限制 767 | 
|  |      7LeegoYih      2022-11-27 22:00:18 +08:00 比较小的字符串我会用 191 或者 64 postgres 比较香,直接 text 梭哈了,除非特殊场景 int bigint 这种可以不写长度,因为 mysql 并不能限制 | 
|      8fengyedzf      2023-02-02 17:03:55 +08:00  2 这篇文章有解析,但 in english https://news.ycombinator.com/item?id=27189998 |