本文基于 MySQL8.0,InnoDB引擎,如有错误欢迎指正。
字段类型
-
数字
- 尽量选择符合存储范围的前提下的小类型,知道每一种占用的字节数。
- 不存在负数需求情况下使用无符号
unsigned
- ID用
int
自增,一般选bigint
没啥必要 tinyint
可以用来存储 布尔、枚举、年龄等,布尔用0和1表示。- 不使用浮点数。金额的存储可以用
int
扩大100倍的方式,或者用decimal
(本质是字符串)
-
字符串
- 固定长度如手机号、身份证、hash值使用
char
。 - 如博客内容,大段落文本使用
text
。 - 其他使用
varchar
。虽然磁盘占用按实际大小,但是字段应设置尽量小的长度限制。不需要16、64这种'整数',完全可以10、20。
- 固定长度如手机号、身份证、hash值使用
-
时间
- 日期时间,建议使用
datetime
,不建议timestamp
和int
,原因见下文。 - 创建时间设置
NOT NULL DEFAULT CURRENT_TIMESTAMP
,更新时间NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
,自动维护。
- 日期时间,建议使用
2022年12月24日大约 13 分钟