深入解析 MySQL 数据库:数据类型
在 MySQL 数据库中,数据类型(Data Types)用于定义表中每一列的性质,包括存储的数据形式及其操作。这些数据类型可以分为几大类:数值类型、日期和时间类型、字符串类型等。以下是对 MySQL 数据类型的深入解析。
- 整数类型 TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT
- 浮点类型 FLOAT、DOUBLE
- 定点数类型 DECIMAL
- 位类型 BIT
- 日期时间类型 YEAR、TIME、DATE、DATETIME、TIMESTAMP
- 文本字符串类型 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT
- 枚举类型 ENUM
- 集合类型 SET
- 二进制字符串类型 BINARY、VARBINARY、TINYBLOB、BLOB、MEDIUMBLOB、LONGBLOB
- JSON类型 JSON对象、JSON数组
- 空间数据类型 单值类型:GEOMETRY、POINT、LINESTRING、POLYGON;
- 集合类型:MULTIPOINT、MULTILINESTRING、MULTIPOLYGON、GEOMETRYCOLLECTION
常见数据类型的属性,如下:
MySQL关键字 | 含义 |
NULL | 数据列可包含NULL值 |
NOT NULL | 数据列不允许包含NULL值 |
DEFAULT | 默认值 |
PRIMARY KEY | 主键 |
AUTO_INCREMENT | 自动递增,适用于整数类型 |
UNSIGNED | 无符号 |
CHARACTER SET name | 指定一个字符集 |
一、数值类型
数值类型用于存储数字,包括整数和浮点数。
1. 整数类型
- TINYINT: 小整数,范围从 -128 到 127(或 0 到 255,若定义 UNSIGNED)。
- SMALLINT: 小型整数,范围从 -32,768 到 32,767(或 0 到 65,535,若定义 UNSIGNED)。
- MEDIUMINT: 中型整数,范围从 -8,388,608 到 8,388,607(或 0 到 16,777,215,若定义 UNSIGNED)。
- INT: 整数,范围从 -2,147,483,648 到 2,147,483,647(或 0 到 4,294,967,295,若定义 UNSIGNED)。
- BIGINT: 大整数,范围从 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(或 0 到 18,446,744,073,709,551,615,若定义 UNSIGNED)。
2. 浮点数类型
- FLOAT: 单精度浮点数,范围约为 -3.402823466E+38 到 3.402823466E+38。
- DOUBLE: 双精度浮点数,范围约为 -1.7976931348623157E+308 到 1.7976931348623157E+308。
- DECIMAL(M, D): 精确的数值类型,
M
是总位数,D
是小数位数。例如,DECIMAL(10, 2)
可以存储总共 10 位数字,其中 2 位在小数点后。
二、字符串类型
字符串类型用于存储文本数据。
1. 定长字符串
- CHAR(M): 定长字符串,字符数为 M。若实际存储的字符少于 M 则用空格填充。
2. 变长字符串
- VARCHAR(M): 变长字符串,最大字符数为 M。存储实际字符数加 1 或 2 字节用于记录长度。
3. 文本类型
- TINYTEXT: 最多 255 字节的文本。
- TEXT: 最多 65,535 字节的文本。
- MEDIUMTEXT: 最多 16,777,215 字节的文本。
- LONGTEXT: 最多 4,294,967,295 字节的文本。
4. 二进制字符串
- BINARY(M): 定长二进制字符串,和
CHAR
类似。 - VARBINARY(M): 变长二进制字符串,类似于
VARCHAR
。 - TINYBLOB, BLOB, MEDIUMBLOB, LONGBLOB: 分别是对应 255 字节、65,535 字节、16,777,215 字节和 4,294,967,295 字节的二进制大对象(BLOB)。
三、日期和时间类型
日期和时间类型用于存储日期和时间值。
- DATE: 日期,格式为
YYYY-MM-DD
,范围为1000-01-01
到9999-12-31
。 - DATETIME: 日期和时间,格式为
YYYY-MM-DD HH:MM:SS
,范围为1000-01-01 00:00:00
到9999-12-31 23:59:59
。 - TIMESTAMP: 时间戳,格式为
YYYY-MM-DD HH:MM:SS
,范围为1970-01-01 00:00:01
UTC 到2038-01-19 03:14:07
UTC。 - TIME: 时间,格式为
HH:MM:SS
,范围为'-838:59:59'
到'838:59:59'
。 - YEAR(M): 年,范围为
1901
到2155
,或者使用 2 位数字表示。
四、其他数据类型
- ENUM: 枚举类型,可以存储在预定义的字符串列表中。每个值都有一个对应的整数索引。
CREATE TABLE example (
color ENUM('red', 'green', 'blue')
);
- SET: 一个字符串对象,可以有 0 个或多个值,从预定义的字符串列表中选择,采用集合形式。
CREATE TABLE example (
permissions SET('read', 'write', 'execute')
);
五、结论
理解数据类型是进行数据库设计和优化的重要基础。选择合适的数据类型可以提高存储效率和查询性能。在设计数据库时,需根据业务需求合理选择数据类型,以确保数据的完整性和准确性。