编辑
2025-07-20
MySQL
00
请注意,本文编写于 138 天前,最后修改于 138 天前,其中某些信息可能已经过时。

目录

一、基础数据类型
1. 数值型(Numeric)
2. 字符型(Character)
3. 日期与时间型(Date/Time)
4. 布尔型(Boolean)
二、二进制与大对象类型
1. 二进制类型
2. 其他大对象类型
三、特殊数据类型
1. 枚举与集合类型
2. 数组类型
3. JSON/XML类型
4. 空间数据类型
五、数据类型选择原则

一、基础数据类型

1. 数值型(Numeric)

整数类型:存储整数值,无小数部分。
TINYINT(1字节,范围-128到127或0到255)
SMALLINT(2字节,范围-32768到32767)
INT/INTEGER(4字节,范围约-21亿~21亿)
BIGINT(8字节,范围极大)
浮点与定点数:存储带小数的数值。
FLOAT(单精度浮点数,约7位有效数字)
DOUBLE(双精度浮点数,约15位有效数字)
DECIMAL(p,s)/NUMERIC(p,s)(精确小数,p为总位数,s为小数位,如DECIMAL(10,2))

2. 字符型(Character)

定长字符串:固定长度,不足补空格。
CHAR(n)(n为长度,如CHAR(50))
变长字符串:实际长度可变,节省空间。
VARCHAR(n)(n为最大长度,如VARCHAR(255))
大文本类型:存储超长文本。
TEXT(MySQL)/CLOB(Oracle,Character Large Object)
TINYTEXT/MEDIUMTEXT/LONGTEXT(MySQL细分)

3. 日期与时间型(Date/Time)

日期:仅日期,无时间。
DATE(格式YYYY-MM-DD)
时间:仅时间,无日期。
TIME(格式HH:MM


日期时间组合: DATETIME(MySQL,格式YYYY-MM-DD HH:MM

TIMESTAMP(时间戳,带时区,范围1970~2038年)
间隔类型:存储时间差(如PostgreSQL的INTERVAL)。

4. 布尔型(Boolean)

存储真/假值,通常用TRUE/FALSE或1/0表示。
BOOLEAN(PostgreSQL、MySQL 5.0+)
BIT(1位存储,如BIT(1))

二、二进制与大对象类型

1. 二进制类型

存储二进制数据(如图片、文件)。
BINARY(n)(定长二进制,类似CHAR)
VARBINARY(n)(变长二进制,类似VARCHAR)
BLOB(Binary Large Object,如TINYBLOB/MEDIUMBLOB/LONGBLOB)

2. 其他大对象类型

CLOB:字符大对象(如文本文件)。
NCLOB:国家字符集大对象(存储Unicode字符)。

三、特殊数据类型

1. 枚举与集合类型

枚举(ENUM):限定列只能取预设值之一。
ENUM('男', '女', '未知')(MySQL)
集合(SET):允许列取多个预设值。
SET('A', 'B', 'C')(MySQL,最多64个成员)

2. 数组类型

存储数组(如PostgreSQL的INTEGER[]或TEXT[])。

3. JSON/XML类型

存储JSON文档或XML数据。
JSON(MySQL 5.7+、PostgreSQL)
XML(PostgreSQL、SQL Server)

4. 空间数据类型

存储地理空间数据(如PostGIS的GEOMETRY、POINT、LINESTRING)。
#四、用户自定义类型
部分数据库支持自定义数据类型,例如:
复合类型:组合多个字段(如PostgreSQL的CREATE TYPE)。
域类型:基于现有类型添加约束(如CREATE DOMAIN)。

五、数据类型选择原则

精度与范围:如财务数据优先用DECIMAL而非FLOAT。
存储效率:定长字段(CHAR)适合长度固定的数据(如身份证号),变长字段(VARCHAR)适合可变长度数据。
查询性能:日期类型比字符串更易排序和过滤。
兼容性:跨数据库时注意类型名称差异(如MySQL的INT vs PostgreSQL的INTEGER)。
示例:不同数据库的整数类型对比

数据库1字节整数类型4字节整数类型8字节整数类型
MySQLTINYINTINTBIGINT
PostgreSQLSMALLINTINTEGERBIGINT
OracleNUMBER(3)NUMBER(10)NUMBER(19)

通过合理选择数据类型,可优化存储空间、提升查询效率并确保数据准确性。

本文作者:haotian

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!