2021-06-10 06:32:30
选择合适的SQL数据类型是数据库设计的核心环节,直接影响存储效率、查询性能和数据完整性。以下从数据特征和实际需求出发,提供完整的SQL字段类型设置指南:

TINYINT:存储0-255的整数(如用户年龄)
INT:存储-2^31到2^31-1的整数(如商品数量)
BIGINT:存储超大整数(如分布式ID)
货币计算必须指定精度(如DECIMAL(10,2)存储价格)
FLOAT:单精度浮点数(约7位有效数字)
DOUBLE:双精度浮点数(约15位有效数字)
⚠️ 避免用于财务计算(存在精度损失风险)

存储长度可变的文本(如用户名、地址)
最大长度65,535字节(MySQL)
存储固定长度编码(如MD5哈希值、国家代码)
不足长度时自动填充空格
TINYTEXT:255字节
TEXT:65,535字节
MEDIUMTEXT:16MB
LONGTEXT:4GB
DATE:仅存储日期(如生日)
TIME:仅存储时间(如营业时间)
DATETIME:存储日期时间(无时区信息)
TIMESTAMP:存储UTC时间(范围1970-2038年)
DATETIMEOFFSET:存储带时区偏移量的时间(如全球会议安排)
数据库内部统一使用UTC时间存储
应用层转换为用户本地时间显示

TINYBLOB:255字节
BLOB:65KB
MEDIUMBLOB:16MB
LONGBLOB:4GB
适用场景:图片、PDF文件、音频等
存储超长文本(如法律文书、日志文件)
大对象建议单独表存储
考虑使用文件系统+数据库路径引用的混合方案
示例:status ENUM('pending','approved','rejected')
优势:强制数据有效性,节省存储空间
示例:permissions SET('read','write','delete')
特性:每个值对应一个二进制位,最多64个成员
预定义值集合需保持稳定
避免频繁修改枚举定义
用INT UNSIGNED替代BIGINT(当数值不会超过42亿时)
使用YEAR类型存储年份(仅需1字节)
为常用查询条件创建索引
避免在长文本字段上建索引
现代数据库支持JSON查询(如MySQL的JSON_EXTRACT)
示例:存储用户配置config JSON,查询SELECT JSON_EXTRACT(config,'$.theme')
Oracle的NUMBER对应MySQL的DECIMAL
SQL Server的NVARCHAR对应MySQL的VARCHAR(带字符集)
使用ANSI SQL标准类型(如VARCHAR而非NVARCHAR)
避免数据库特有类型(如MySQL的ENUM)
通过系统化的数据类型选择,可实现:
实际设计时应结合具体业务需求,通过测试验证类型选择的合理性,并建立类型使用规范文档确保团队一致性。