MySQL:数据类型
数值类型
数值类型用于存储整数、小数、浮点数等,主要分为整数类型和浮点类型。
整数类型
数据类型 | 存储大小 | 取值范围(有符号) | 取值范围(无符号) | 说明 |
---|---|---|---|---|
TINYINT | 1字节 | -128 ~ 127 | 0 ~ 255 | 小整数,如布尔值(0/1) |
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(21亿) | 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 | 存储超大整数,如用户ID |
UNSIGNED
(无符号):去掉负数部分,范围变为 0 到 2倍的最大正数。ZEROFILL
(零填充):自动在左侧填充零,主要用于格式化输出。
CREATE TABLE test_int (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
small_num SMALLINT ZEROFILL
);
浮点类型
数据类型 | 存储大小 | 说明 |
---|---|---|
FLOAT(M, D) | 4字节 | 单精度浮点数,M是总位数,D是小数位数 |
DOUBLE(M, D) (REAL ) | 8字节 | 双精度浮点数,精度更高 |
DECIMAL(M, D) (NUMERIC ) | M+1字节 | 高精度定点数,适用于存储货币金额 |
CREATE TABLE test_float (
price DECIMAL(10,2), -- 总共10位,其中2位小数,如 99999999.99
rate FLOAT(5,2) -- 总共5位,其中2位小数,如 99.99
);
BIT 类型
用于存储二进制位数据,适用于存储布尔值、权限标志等。
数据类型 | 存储大小 | 说明 |
---|---|---|
BIT(M) | 1 ~ 8字节 | 存储 M 位的二进制数据 |
CREATE TABLE test_bit (
flags BIT(8) -- 8位二进制数据
);
INSERT INTO test_bit (flags) VALUES (b'10101010');
字符串类型
字符串类型用于存储文本数据,主要包括定长字符串、可变长字符串和文本类型。
定长字符串
数据类型 | 最大长度 | 说明 |
---|---|---|
CHAR(M) | 0 ~ 255 | 定长字符串,存储速度快 |
BINARY(M) | 0 ~ 255 | 二进制定长字符串 |
CREATE TABLE test_char (
fixed_text CHAR(10) -- 始终占用10个字符空间
);
可变长字符串
数据类型 | 最大长度 | 说明 |
---|---|---|
VARCHAR(M) | 0 ~ 65,535 | 可变长字符串,实际占用长度+1字节 |
VARBINARY(M) | 0 ~ 65,535 | 可变长二进制数据 |
CREATE TABLE test_varchar (
name VARCHAR(50) -- 最多存储50个字符
);
文本类型
数据类型 | 最大存储大小 | 说明 |
---|---|---|
TINYTEXT | 255字节 | 小文本 |
TEXT | 65,535字节(64KB) | 一般文本 |
MEDIUMTEXT | 16,777,215字节(16MB) | 中等大小文本 |
LONGTEXT | 4,294,967,295字节(4GB) | 大文本 |
CREATE TABLE test_float (
price DECIMAL(10,2), -- 总共10位,其中2位小数,如 99999999.99
rate FLOAT(5,2) -- 总共5位,其中2位小数,如 99.99
);
日期时间类型
MySQL 提供多个日期时间类型,用于存储日期、时间、时间戳等。
数据类型 | 存储大小 | 格式 | 说明 |
---|---|---|---|
DATE | 3字节 | YYYY-MM-DD | 仅存储日期,如 2025-03-28 |
DATETIME | 8字节 | YYYY-MM-DD HH:MM:SS | 存储日期和时间 |
TIMESTAMP | 4字节 | YYYY-MM-DD HH:MM:SS | 记录时间戳,受时区影响 |
TIME | 3字节 | HH:MM:SS | 仅存储时间 |
YEAR | 1字节 | YYYY | 存储4位年份 |
CREATE TABLE test_date (
event_date DATE,
event_time TIME,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
ENUM 和 SET 类型
用于存储固定范围的字符串。
ENUM 枚举
只能选择其中一个值,存储占用1-2字节。
CREATE TABLE test_enum (
status ENUM('active', 'inactive', 'pending')
);
SET 集合
可以存储多个选项,占用1-8字节。
CREATE TABLE test_set (
roles SET('admin', 'editor', 'user')
);
JSON类型
MySQL 5.7+ 支持 JSON
类型,用于存储结构化数据。
INSERT INTO test_json (data) VALUES ('{"name": "Alice", "age": 25}');
# 查询
SELECT data->>'$.name' FROM test_json; -- 提取 JSON 中的 name