概述
- MySQL 是一个广泛使用的关系型数据库管理系统,它支持多种数据类型,
- 可分为三大类:数值类型、日期和时间类型、字符串类型,
- 另外还有一些特殊类型(如 JSON、空间数据类型等)。下面我将详细介绍这些类型及其特点。
- 资料已经分类整理好:
https://pan.quark.cn/s/f52968c518d3
一、数值类型
数值类型用于存储数字,可分为整数类型和浮点类型。
1. 整数类型
- TINYINT:1字节,范围为
-128到127(有符号)或0到255(无符号)。 - SMALLINT:2字节,范围为
-32,768到32,767(有符号)或0到65,535(无符号)。 - MEDIUMINT:3字节,范围为
-8,388,608到8,388,607(有符号)或0到16,777,215(无符号)。 - INT/INTEGER:4字节,范围为
-2,147,483,648到2,147,483,647(有符号)或0到4,294,967,295(无符号)。 - BIGINT:8字节,范围为
-9,223,372,036,854,775,808到9,223,372,036,854,775,807(有符号)或0到18,446,744,073,709,551,615(无符号)。
特点:
- 无符号类型(
UNSIGNED)只能存储非负数,范围更大。 - 可指定显示宽度(如
INT(5)),但不影响存储范围,仅用于格式化输出。
2. 浮点类型
- FLOAT:4字节,单精度浮点数,精度约为 7 位小数。
- DOUBLE:8字节,双精度浮点数,精度约为 15 位小数。
- DECIMAL/NUMERIC:用于存储精确的小数值,如
DECIMAL(10,2)表示总共 10 位数字,其中小数部分占 2 位。
特点:
FLOAT和DOUBLE适用于近似值计算,可能存在精度损失。DECIMAL适用于财务计算(如金额),确保精确性,但性能略低于浮点类型。
二、日期和时间类型
用于存储日期和时间值。
1. 常用类型
- DATE:格式为
YYYY-MM-DD,范围从1000-01-01到9999-12-31。 - TIME:格式为
HH:MM:SS,范围从-838:59:59到838:59:59(支持负数表示时间间隔)。 - DATETIME:格式为
YYYY-MM-DD HH:MM:SS,范围从1000-01-01 00:00:00到9999-12-31 23:59:59。 - TIMESTAMP:格式同
DATETIME,但范围更小(1970-01-01 00:00:01 UTC到2038-01-19 03:14:07 UTC),且会自动转换为服务器时区。 - YEAR:格式为
YYYY或YY(如2023或23),范围从1901到2155。
特点:
TIMESTAMP占用 4 字节(比DATETIME的 8 字节更节省空间),且支持自动更新(如ON UPDATE CURRENT_TIMESTAMP)。DATETIME存储的是实际值,与时区无关。
三、字符串类型
用于存储文本或二进制数据。
1. 固定长度字符串
- CHAR(N):固定长度字符串,
N为字符数(1 ≤ N ≤ 255)。 - BINARY(N):固定长度二进制字符串,
N为字节数。
特点:
CHAR会自动填充空格以达到指定长度,检索时去除尾部空格。BINARY用于存储二进制数据(如图片、文件)。
2. 可变长度字符串
- VARCHAR(N):可变长度字符串,
N为最大字符数(1 ≤ N ≤ 65,535)。 - VARBINARY(N):可变长度二进制字符串。
特点:
VARCHAR仅存储实际长度,更节省空间,但检索效率略低于CHAR。
3. 大文本和二进制类型
- TEXT:存储大文本,最大长度为 65,535 字节(TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT 分别支持不同长度)。
- BLOB:存储二进制大对象,最大长度为 65,535 字节(TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB 分别支持不同长度)。
特点:
TEXT和BLOB不支持默认值。- 避免在
WHERE条件中使用TEXT/BLOB字段,可能影响性能。
4. 枚举和集合类型
- ENUM(‘value1’,‘value2’,…):从预定义列表中选择单个值,最多 65,535 个选项。
- SET(‘value1’,‘value2’,…):从预定义列表中选择 0 个或多个值,最多 64 个选项。
特点:
ENUM和SET存储为整数,节省空间且查询效率高。
四、特殊类型
1. JSON
- JSON:存储 JSON 格式数据(如
{"name":"John","age":30})。 - 特点:支持 JSON 函数(如
JSON_EXTRACT),但性能略低于传统列。
2. 空间数据类型
- GEOMETRY:存储任意几何对象(点、线、多边形等)。
- POINT、LINESTRING、POLYGON:存储特定类型的几何对象。
- 特点:用于地理信息系统(GIS),需配合空间索引(如 SPATIAL)。
3. 其他类型
- BOOLEAN/TINYINT(1):MySQL 中没有真正的
BOOLEAN,通常用TINYINT(1)代替,0表示FALSE,非0表示TRUE。 - BIT(N):存储位值,
N为位数(1 ≤ N ≤ 64)。
五、选择建议
- 整数:根据数值范围选择合适的类型(如
TINYINT用于状态码,INT用于用户 ID)。 - 小数:财务计算用
DECIMAL,其他场景用FLOAT/DOUBLE。 - 日期时间:
TIMESTAMP用于需要自动更新的场景,DATETIME用于固定时间。 - 字符串:固定长度用
CHAR,可变长度用VARCHAR,大文本用TEXT。
通过合理选择数据类型,可以优化存储效率和查询性能。
