目录
一、数值型数据
二、日期与时间数据
三、字符串与文本数据
四、布尔值与状态码
五、二进制与文件数据
六、唯一标识符(GUID)
七、枚举与代码表设计
八、存储优化小结
九、总结
在数据库设计中,字段类型(数据类型)的选择至关重要。合理的数据类型不仅能提升查询性能,还能节省存储空间、减少数据异常。本文将以 SQL Server 为例,系统梳理常见数据类型及其应用场景,帮助你设计高质量数据库。
一、数值型数据
需求 | 
推荐类型 | 
说明 | 
整数(范围小,如状态码、性别) | 
TINYINT | 
1字节,范围0~255 | 
整数(一般性,如ID、自增主键) | 
INT | 
4字节,范围 -2,147,483,648 ~ 2,147,483,647 | 
超大整数(特殊场景) | 
BIGINT | 
8字节,范围非常大 | 
小数(精确到小数点后4位以内) | 
DECIMAL(p, s) / NUMERIC(p, s) | 
p = 总位数,s = 小数位数,金融数据推荐 | 
小数(对精度要求不高,如测量值) | 
FLOAT / REAL | 
浮点数,有精度误差 | 
最佳实践:
- 
金融金额/汇率 → DECIMAL(18,2)
 
- 
体重/温度等测量值 → FLOAT
 
二、日期与时间数据
需求 | 
推荐类型 | 
说明 | 
仅存储日期(年月日) | 
DATE | 
只包含年月日,无时间 | 
存储日期与时间(到秒) | 
DATETIME | 
最常用日期时间类型,精度到0.003秒 | 
存储日期与时间(到毫秒/更高精度) | 
DATETIME2 | 
替代DATETIME,精度更高 | 
仅存储时间(不含日期) | 
TIME | 
只存储时分秒 | 
仅存储年份+月份 | 
CHAR(7) / DATE(存01日) | 
推荐用CHAR(7)存\'YYYY-MM\' | 
最佳实践:
- 
日志时间戳 → DATETIME2(3)
 
- 
报表月份字段 → CHAR(7)
 
三、字符串与文本数据
需求 | 
推荐类型 | 
说明 | 
固定长度短字符串(如手机号) | 
CHAR(n) | 
长度固定,查询性能好 | 
可变长度短字符串(如用户名、地址) | 
VARCHAR(n) | 
变长节省空间 | 
可变长度长文本(如备注、简介) | 
VARCHAR(MAX) | 
可存储2GB,慎用,尽量避免过大文本 | 
Unicode字符(需存中文、表情等) | 
NCHAR(n) / NVARCHAR(n) | 
字符集为Unicode,存储中文必用 | 
最佳实践:
- 
手机号 → CHAR(11)
 
- 
用户名 → NVARCHAR(50)
 
- 
备注 → NVARCHAR(255)
 
四、布尔值与状态码
需求 | 
推荐类型 | 
说明 | 
真/假(二元状态) | 
BIT | 
0/1布尔值,占用1位 | 
状态码(有枚举值,如1=启用,2=禁用) | 
TINYINT / SMALLINT | 
枚举型状态字段 | 
注意:SQL Server 无专门的 BOOLEAN 类型,用 BIT 替代。
五、二进制与文件数据
需求 | 
推荐类型 | 
说明 | 
存储小图片、文件(<8KB) | 
VARBINARY(n) | 
指定字节长度 | 
存储大文件(图片、PDF、文档等) | 
VARBINARY(MAX) | 
最多2GB文件,通常不推荐存大文件于数据库 | 
最佳实践:文件/图片存储路径放数据库,文件本身存OSS/文件服务器。
六、唯一标识符(GUID)
需求 | 
推荐类型 | 
说明 | 
全局唯一主键标识 | 
UNIQUEIDENTIFIER | 
16字节GUID,适用于分布式主键 | 
注意:GUID虽然唯一,但主键性能差,慎用作主键。
七、枚举与代码表设计
八、存储优化小结
数据类型 | 
选型建议 | 
能用 TINYINT 不用 INT | 
节省空间 | 
固定长度用 CHAR,变长用 VARCHAR | 
频繁查询字段用 CHAR 性能更优 | 
存中文必须用 NCHAR/NVARCHAR | 
中文字符存储翻倍空间 | 
文件与图片不推荐存数据库 | 
存路径/URL即可 | 
时间戳用 DATETIME2 替代 DATETIME | 
精度高,存储空间更小 | 
九、总结
SQL Server 数据库字段设计时,“数据类型”与“字段长度”影响着性能、存储与数据质量。字段类型选型的核心原则是:尽量精确匹配业务需求,避免过度设计与浪费空间,同时兼顾查询性能与后续扩展性。