SQL入门:数据库核心数据类型全解析

数据库数据类型是定义表中每个列(字段)可以包含的数据种类(例如,整数、字符串、日期等)的基本规则,直接影响数据存储效率、完整性及查询性能。不同数据库(如 MySQL、Oracle、PostgreSQL)的类型名称略有差异,但核心分类一致。

以下是通用核心数据类型分类及标准说明:

一、数值数据类型(存储数字)

用于存储整数、小数等数值,需根据数据范围选择,避免空间浪费。

整数类型:

 INT(INTEGER),占 4 字节,取值范围约 ±21 亿,最常用的整数类型适合存储订单 ID、用户 ID、商品数量等常规整数;

SMALLINT ,占 2 字节,范围约 ±3.2 万,适合小范围整数适合年龄、状态码(如 0-100 的状态标识)等小范围整数;

BIGINT ,占 8 字节,范围约 ±9e18,适合超大整数,适合大额订单号等超大整数场景。

小数类型:

DECIMAL (p,s) 是定点小数,p代表总位数,s代表小数位数(比如 DECIMAL (10,2) 可存储最多 8 位整数 + 2 位小数),精度无丢失,专门用于金额、价格、税率等需要精确计算的场景;

FLOAT / DOUBLE,浮点小数,分别占 4 字节和 8 字节,存储的是近似值(存在精度丢失),适合科学计算、非精确数值记录等场景。

二、字符类型(存储文本)

用于存储字符串、文字等,分 “定长” 和 “变长” 两类,影响存储效率

变长字符类型:

VARCHAR (n) 是最常用的,n表示最大字符数(如 VARCHAR (50) 可存储 1-50 个字符),存储时按实际内容长度占用空间,节省存储资源,适合用户名、邮箱、商品名称等长度不固定的文本。

定长字符类型:

CHAR (n) 的长度固定,n为固定字符数(如 CHAR (10) 无论实际内容多长,都占 10 个字符的空间,不足时补空格),查询速度快,适合手机号(固定 11 位)、性别(1 位标识,如 M/F/U)等长度固定的文本。

长文本类型:

TEXT 可存储约 65535 字节的长文本,不适合创建索引,适合商品描述、订单备注等中等长度的文本;

LONGTEXT 存储容量更大,可达约 4GB,适合文章内容、系统日志详情等超长文本场景。

三、日期时间类型(存储时间)

专门用于存储日期、时间,避免用字符类型存储(无法做时间运算)。

DATE 类型:

仅存储日期,占 3 字节,取值范围从 1000-01-01 到 9999-12-31,格式如 “2025-05-20”,适合存储生日、订单创建日期等仅需日期的场景。

TIME 类型:

仅存储时间,占 3 字节,范围从 - 838:59:59 到 838:59:59,格式如 “17:30:00”,适合打卡时间、会议时长等仅需时间的场景。

DATETIME 类型:

同时存储日期和时间,占 8 字节,范围从 1000-01-01 00:00:00 到 9999-12-31 23:59:59,格式如 “2025-05-20 17:30:00”,适合订单创建时间、用户注册时间等需完整时间记录的场景。

TIMESTAMP 类型:

同样存储日期和时间,占 4 字节,但范围较窄(1970-01-01 00:00:01 到 2038-01-19 03:14:07),支持 “更新时自动刷新时间” 的特性,适合存储数据最后更新时间。

四、特殊类型(存储特定数据)

针对特殊场景设计,需根据业务需求选择。

布尔类型:

BOOLEAN 类型仅存储 TRUE(对应数值 1)或 FALSE(对应数值 0),部分数据库(如 MySQL)用 TINYINT (1) 替代,适合标记 “是否启用”“是否支付” 等二元状态。

枚举类型:

ENUM 类型需预设可选值列表(如 ENUM (' 待支付 ',' 已支付 ',' 已取消 ')),字段值只能从列表中选择,能确保数据合法性,适合订单状态、商品分类等取值固定的场景。

二进制类型:

BLOB 用于存储图片、文件等二进制数据,但通常不推荐直接存储(会增加表体积,影响性能),更建议存储文件路径;

LONGLOB 则支持更大体积的二进制数据。

JSON 类型:

可直接存储 JSON 格式数据,支持 JSON 解析和查询(如 MySQL 5.7+、PostgreSQL 均支持),适合存储用户偏好设置、复杂结构的配置信息等非结构化数据。

选择数据类型时,需遵循 “最小够用” 原则(如年龄用 SMALLINT 而非 INT)、“精度优先” 原则(金额用 DECIMAL 而非 FLOAT)、“语义匹配” 原则(时间用日期时间类型而非字符类型),同时注意索引友好性(VARCHAR 长度建议≤50,TEXT/BLOB 不适合做索引),以平衡性能和存储效率。

不同数据库对类型的支持有细微差异(如 Oracle 的 NUMBER 对应 MySQL 的 DECIMAL,PostgreSQL 的 SERIAL 是自增整数),实际使用时需结合具体数据库文档调整,但核心分类和选择逻辑一致。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值