目录
一、数值型数据
二、日期与时间数据
三、字符串与文本数据
四、布尔值与状态码
五、二进制与文件数据
六、唯一标识符(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 数据库字段设计时,“数据类型”与“字段长度”影响着性能、存储与数据质量。字段类型选型的核心原则是:尽量精确匹配业务需求,避免过度设计与浪费空间,同时兼顾查询性能与后续扩展性。