Appearance
数据类型
数值类型
整数类型
| 类型 | 字节 | 范围 | 说明 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 小整数 |
| SMALLINT | 2 | -32768 ~ 32767 | 短整数 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 中等整数 |
| INT | 4 | -21亿 ~ 21亿 | 标准整数 |
| BIGINT | 8 | 非常大 | 大整数 |
sql
CREATE TABLE numbers (
tiny_col TINYINT,
int_col INT,
bigint_col BIGINT
);无符号整数
sql
CREATE TABLE unsigned_nums (
positive_int INT UNSIGNED
);浮点类型
| 类型 | 说明 |
|---|---|
| FLOAT | 单精度浮点数,4字节 |
| DOUBLE | 双精度浮点数,8字节 |
| DECIMAL | 精确小数,用于财务计算 |
sql
CREATE TABLE decimals (
price DECIMAL(10, 2),
rate FLOAT,
amount DOUBLE
);DECIMAL 精度说明
sql
DECIMAL(M, D)- M: 总位数(精度)
- D: 小数位数(标度)
sql
salary DECIMAL(10, 2)表示最多10位数字,其中2位小数,最大值 99999999.99
字符串类型
定长字符串
sql
CHAR(M)- 固定长度,不足补空格
- M 范围: 0-255
- 适合存储固定长度数据(如手机号、身份证)
sql
CREATE TABLE chars (
phone CHAR(11),
id_card CHAR(18)
);变长字符串
sql
VARCHAR(M)- 可变长度,按实际存储
- M 范围: 0-65535
- 适合存储长度不固定的数据
sql
CREATE TABLE varchars (
username VARCHAR(50),
email VARCHAR(100)
);TEXT 类型
| 类型 | 最大长度 | 说明 |
|---|---|---|
| TINYTEXT | 255 | 小文本 |
| TEXT | 65535 | 普通文本 |
| MEDIUMTEXT | 16MB | 中等文本 |
| LONGTEXT | 4GB | 大文本 |
sql
CREATE TABLE articles (
title VARCHAR(200),
content TEXT
);CHAR vs VARCHAR
sql
CREATE TABLE compare (
char_col CHAR(10),
varchar_col VARCHAR(10)
);
INSERT INTO compare VALUES ('abc', 'abc');
SELECT LENGTH(char_col), LENGTH(varchar_col) FROM compare;日期时间类型
日期类型
| 类型 | 格式 | 范围 | 说明 |
|---|---|---|---|
| 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 ~ 9999-12-31 | 日期时间 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 1970-01-01 ~ 2038-01-19 | 时间戳 |
| YEAR | YYYY | 1901 ~ 2155 | 年份 |
sql
CREATE TABLE dates (
birth_date DATE,
work_time TIME,
created_at DATETIME,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
year_col YEAR
);DATETIME vs TIMESTAMP
| 特性 | DATETIME | TIMESTAMP |
|---|---|---|
| 存储 | 8字节 | 4字节 |
| 时区 | 不转换 | 自动转换 |
| 范围 | 更大 | 1970-2038 |
| 默认值 | 支持 | 支持 CURRENT_TIMESTAMP |
sql
CREATE TABLE time_test (
dt DATETIME,
ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);二进制类型
| 类型 | 说明 |
|---|---|
| BINARY | 定长二进制 |
| VARBINARY | 变长二进制 |
| BLOB | 二进制大对象 |
| TINYBLOB | 小 BLOB |
| MEDIUMBLOB | 中等 BLOB |
| LONGBLOB | 大 BLOB |
sql
CREATE TABLE files (
file_name VARCHAR(100),
file_data BLOB
);JSON 类型
MySQL 5.7+ 支持 JSON 类型:
sql
CREATE TABLE json_test (
id INT PRIMARY KEY,
data JSON
);
INSERT INTO json_test VALUES (1, '{"name": "张三", "age": 25}');
SELECT data->>'$.name' FROM json_test;
SELECT JSON_EXTRACT(data, '$.age') FROM json_test;JSON 函数
sql
JSON_OBJECT('name', '张三', 'age', 25)
JSON_ARRAY(1, 2, 3)
JSON_EXTRACT(data, '$.name')
JSON_SET(data, '$.age', 26)
JSON_REMOVE(data, '$.age')枚举和集合
ENUM 枚举
sql
CREATE TABLE users (
status ENUM('active', 'inactive', 'banned') DEFAULT 'active'
);
INSERT INTO users (status) VALUES ('active');SET 集合
sql
CREATE TABLE articles (
tags SET('tech', 'life', 'travel', 'food')
);
INSERT INTO articles (tags) VALUES ('tech,life');类型选择建议
数值类型
- 主键: INT 或 BIGINT
- 年龄: TINYINT UNSIGNED
- 价格: DECIMAL
字符串类型
- 固定长度: CHAR
- 变长字符串: VARCHAR
- 大文本: TEXT
日期时间
- 日期: DATE
- 时间戳: TIMESTAMP
- 历史日期: DATETIME