注意了,ANSI SQL 定义了标准数据类型体系,但是各数据库(MySQL、Oracle、PostgreSQL 等)会在此基础上扩展专属类型,但标准类型是所有数据库都支持的核心基础。
下面我会按类别梳理完整的 ANSI SQL 标准数据类型:
用于存储数字,分为精确数值和近似数值两类:
类型名称 | 说明 | 典型使用场景 |
INTEGER (INT) | 整数,精度固定,范围约 ±2^31-1(±21 亿) | 存储 ID、数量、年龄等整数 |
SMALLINT | 小整数,范围约 ±2^15-1(±32767) | 存储状态码、小范围计数 |
BIGINT | 大整数,范围约 ±2^63-1(±9e18) | 存储超大 ID、海量计数 |
DECIMAL(p, s) NUMERIC(p, s) | 精确小数,p= 总位数(精度),s= 小数位数(标度) | 金额、税率、高精度计量 |
FLOAT(p) | 单精度浮点数,p为二进制精度(1-53) | 非精确计量(如科学计算) |
REAL | 单精度浮点数(等价于 FLOAT (24)) | 普通浮点计算 |
DOUBLE PRECISION | 双精度浮点数(等价于 FLOAT (53)) | 高精度浮点计算 |
BOOLEAN | 布尔值,取值为 TRUE / FALSE / UNKNOWN(兼容 NULL) | 存储开关、状态标记 |
用于存储文本字符串:
类型名称 | 说明 | 典型使用场景 |
CHAR(n) | 定长字符,n为字符数(不足补空格),n默认 1 | 存储固定长度编码(如邮编) |
VARCHAR(n) | 变长字符,n为最大字符数(仅存储实际长度) | 存储名称、描述等可变文本 |
CLOB (Character Large Object) | 大字符对象,存储超长文本(无长度限制) | 存储文章、日志、富文本 |
用于存储时间相关数据:
类型名称 | 说明 | 典型使用场景 |
DATE | 日期类型,仅存储年 - 月 - 日(无时间) | 存储生日、交易日期 |
TIME | 时间类型,仅存储时:分: 秒(可含小数秒) | 存储打卡时间、事件时刻 |
TIME WITH TIME ZONE | 带时区的时间类型 | 跨时区业务的时间记录 |
TIMESTAMP | 时间戳,存储年 - 月 - 日 时:分: 秒(可含小数秒) | 存储创建时间、更新时间 |
TIMESTAMP WITH TIME ZONE | 带时区的时间戳(跨时区业务核心类型) | 全球化业务的时间记录 |
INTERVAL | 时间间隔,存储两个时间点的差值(如 1 天 2 小时) | 计算时间差、有效期 |
用于存储非文本的二进制数据:
类型名称 | 说明 | 典型使用场景 |
BINARY(n) | 定长二进制数据,n为字节数 | 存储固定长度二进制编码 |
VARBINARY(n) | 变长二进制数据,n为最大字节数 | 存储短二进制数据(如 MD5) |
BLOB (Binary Large Object) | 大二进制对象,存储超长二进制数据(无长度限制) | 存储图片、文件、音频视频 |
ANSI SQL 99 及以上版本定义的高级类型(部分数据库需开启扩展支持):
类型名称 | 说明 | 典型使用场景 |
ARRAY | 数组类型,存储同类型的有序集合(如 INT ARRAY) | 存储标签列表、选项集合 |
ROW | 行类型,存储结构化的复合数据(如 ROW (name VARCHAR (50), age INT)) | 临时存储复合数据 |
JSON | JSON 类型,存储 JSON 格式数据(ANSI SQL 2016 新增) | 存储非结构化 / 半结构化数据 |