字段类型选择原则是够用且最小。数值类优先用unsigned窄类型;金额必用decimal;字符串按长度选char/varchar,慎用text;时间统一用datetime或timestamp;布尔用tinyint(1);枚举依变更频率选enum、tinyint或代码表。

选字段类型不是挑最“大”或最“通用”的,而是找刚好够用、又最省资源的那个。核心就一条:够用且最小。
数值类字段:按范围和精度精准匹配
整数优先选带 UNSIGNED 的窄类型:
- 状态码(0/1/2)、开关、性别:用 TINYINT UNSIGNED(0–255,占1字节)
- 订单数量、商品库存(确定 ≤65535):用 SMALLINT UNSIGNED(2字节)
- 用户ID、订单号(纯数字,≤21亿):用 INT UNSIGNED(4字节),比 BIGINT(8字节)省一半空间
- 金额必须用 DECIMAL(M,D),比如 DECIMAL(12,2) 支持千万级金额+两位小数;禁用 FLOAT/DOUBLE(精度丢失)和 VARCHAR(无法计算、排序错乱)
字符串字段:固定长用 CHAR,变长用 VARCHAR,慎用 TEXT
别一概设成 VARCHAR(255) 或 VARCHAR(1000):
一鱼CMS一鱼CMS(APHPCMS)轻量级10秒快速建表一键CRUD生成企业网站,采用PearAdmin和Layui2.9.16。(原YiYuAdmin升级进化版本),超简单模板制作。CMS特色字段预设:表字段预先配置好,新增模型时直接选择生成表。模型字段:可导出,导入,设为预设字段,修改和删除时自动更新表字段。模型字段:结合Layui表可设置查询,表头属性,表头模板。模型字段:可设置表单类型,
- 手机号、身份证号、编码类:长度固定,用 CHAR(N)(如 CHAR(11)),查询更快、存储更紧凑
- 用户名、姓名、标题:用 VARCHAR(N),N 设为业务实际最大长度(如姓名 VARCHAR(20),邮箱 VARCHAR(254))
- 文章正文、日志内容等超长文本,且不参与 WHERE/GROUP BY/ORDER BY:才考虑 TEXT;否则一律用 VARCHAR——因为 TEXT 是离行存储,每次读取多一次 I/O
时间与布尔字段:拒绝字符串伪装
时间存成字符串是典型反模式:
- 统一用 DATETIME 或 TIMESTAMP:前者范围宽(1000–9999年)、占8字节;后者范围窄(1970–2038)、占4字节、带时区转换,日志类高频写入可选 TIMESTAMP
- 布尔值不用 BIT(SQL Server)或 BOOLEAN(MySQL 别名),直接用 TINYINT(1) 存 0/1,语义清晰、兼容性强、索引高效
- 月份汇总字段(如 “2025-03”)可考虑 CHAR(7),比 DATETIME 更轻量且便于分组
枚举与代码类字段:权衡扩展性与效率
固定选项少、几乎不变的场景可直接用原生类型:
- 性别、订单状态(如 'pending','paid','shipped'):MySQL 可用 ENUM,省空间+自动约束;但增删值需 ALTER TABLE,不适合频繁变更
- 更稳妥的做法是用 TINYINT 存状态码(如 1=pending, 2=paid),业务层映射含义,数据库只管高效存储
- 复杂枚举(含名称、描述、启用状态)应拆成独立代码表(Code Table),用外键关联,利于维护和多语言支持









