一、数值类型
1. 整型
2. 浮点型与定点型
二、字符串类型
1. 短文本
2. 长文本与大对象
⚠️ 注意:TEXT/BLOB 不支持默认值,全索引效率低,需前缀索引
三、日期与时间类型
⚠️ 注意:TIMESTAMP 受时区影响,DATETIME 更稳定。
四、特殊类型
五、字段类型选择原则
最小化存储:
优先选最小兼容类型(如状态用TINYINT而非INT)
精确性优先:
财务数据用DECIMAL,避免FLOAT/DOUBLE精度丢失。
性能优化:
频繁查询字段避免用TEXT/BLOB,改用VARCHAR+索引。
兼容性:
存储emoji需utf8mb4字符集(标准utf8不支持4字节)
扩展性:
未来可能增长的字段(如用户名)预留VARCHAR长度。
六、常见错误场景
错误类型转换:
字符串存入数值字段导致插入失败(需显式转换)。
日期格式混乱:
用字符串存日期(如'20250101')无法日期计算,应转DATE
过度使用ENUM:
频繁修改ENUM选项需重构表,建议改用关联表。
七、最佳实践示例
-- 用户表设计
CREATE TABLE users (
id BIGINT UNSIGNED AUTO_INCREMENT PRIMARY KEY, -- 主键
username VARCHAR(50) NOT NULL, -- 可变长度用户名
password CHAR(60) NOT NULL, -- 定长加密密码
email VARCHAR(100) NOT NULL UNIQUE, -- 唯一邮箱
age TINYINT UNSIGNED, -- 年龄(0~255)
balance DECIMAL(10,2) DEFAULT 0.00, -- 账户余额
created_at DATETIME DEFAULT CURRENT_TIMESTAMP,-- 创建时间
status ENUM('active','inactive') DEFAULT 'active'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;