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