想问下 平时工作中, mysql 的字段长度的设定有什么固定规范吗?是喜欢用 varchar(255)还是 varchar(256)

2022-11-27 14:48:34 +08:00
 0xLittleFi

我个人是一直用 2 的每次方进行设计 varchar 的长度,其他的比如 bigint:20 int:4

我也搜了下网上的回答: char, varchar 类型的值,会有一个长度标识位来存值长度。 当定义 varchar 长度小于等于 255 时,长度标识位需要一个字节; 当大于 255 时,长度标识位需要两个字节

cc: https://stackoverflow.com/questions/2340639/why-historically-do-people-use-255-not-256-for-database-field-magnitudes

2992 次点击
所在节点    MySQL
8 条回复
billlee
2022-11-27 15:13:02 +08:00
真要抠这点细节,那要看整个表的一行有多大,凑成页面大小。
eason1874
2022-11-27 16:08:34 +08:00
看你要不要索引,要索引的话,191 比较常用,你可以看到很多开源项目都是 varchar(191)

MySQL 以前的 utf8 只支持到三字节,5.7.7 之前版本的 InnoDB varchar 索引长度是 255 * 3 ,要兼容四字节 utf8mb4 的话就是 (255 * 3) / 4 = 191.25 ,取整数就是 191
Leviathann
2022-11-27 16:38:30 +08:00
索引有 767 长度限制
如果是 3bytes 字符集就是 255
如果是 4bytes 就是 191
jaoyina
2022-11-27 17:12:22 +08:00
字段不要太多,我碰到总字节数不能超过 65535 的问题,导致建表失败。
0xLittleFi
2022-11-27 20:20:02 +08:00
@eason1874 其他的字段呢,比如 int bigint 啥的,也同样有说法?
eason1874
2022-11-27 20:56:31 +08:00
@0xLittleFi 其他的没听过,可以看这个页面 https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html

我记错了,我之前不知道在哪儿看到说新版没有 767 限制了,但是文档看起来新版默认还是限制 767
LeegoYih
2022-11-27 22:00:18 +08:00
比较小的字符串我会用 191 或者 64
postgres 比较香,直接 text 梭哈了,除非特殊场景

int bigint 这种可以不写长度,因为 mysql 并不能限制
fengyedzf
2023-02-02 17:03:55 +08:00
这篇文章有解析,但 in english
https://news.ycombinator.com/item?id=27189998

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/898255

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX