MySQL 数据类型深度解析

在 MySQL 中,**数据类型(Data Types)**决定了表字段能够存储什么样的数据以及占用多少存储空间。合理选择数据类型可以 提高性能、节省空间并避免数据错误

下面是一份 MySQL 数据类型深度解析


一、MySQL 数据类型分类

MySQL 数据类型主要分为 5 大类:

类型说明
数值类型存储整数和浮点数
字符串类型存储文本
日期时间类型存储时间日期
二进制类型存储二进制数据
JSON 类型存储 JSON 数据

二、数值类型(Numeric Types)

1 整数类型(Integer)

类型字节范围(有符号)
TINYINT1-128 ~ 127
SMALLINT2-32768 ~ 32767
MEDIUMINT3-8388608 ~ 8388607
INT4±21亿
BIGINT8±9.22e18

示例:

CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    age TINYINT,
    score SMALLINT
);

常见使用:

场景推荐
年龄TINYINT
用户IDBIGINT
数量INT

2 浮点类型

类型说明
FLOAT单精度
DOUBLE双精度
DECIMAL高精度

示例:

price DECIMAL(10,2)

含义:

总共10位
小数2位

例:

99999999.99

推荐:

场景类型
金额DECIMAL
科学计算DOUBLE

⚠️ 金额 不要使用 FLOAT / DOUBLE


三、字符串类型(String Types)

1 CHAR

固定长度字符串。

CHAR(10)

特点:

  • 长度固定
  • 查询速度快
  • 空间浪费

适合:

性别
国家代码
状态码


2 VARCHAR

可变长度字符串。

VARCHAR(255)

特点:

  • 节省空间
  • 查询略慢

适合:

用户名
邮箱
地址

推荐:

场景类型
短文本VARCHAR
固定长度CHAR

3 TEXT

存储长文本。

类型最大大小
TINYTEXT255B
TEXT64KB
MEDIUMTEXT16MB
LONGTEXT4GB

示例:

content TEXT

常用于:

文章内容
评论
日志


四、日期时间类型

MySQL 提供多种时间类型。

类型格式
DATEYYYY-MM-DD
TIMEHH:MM:SS
DATETIMEYYYY-MM-DD HH:MM:SS
TIMESTAMP时间戳
YEAR

1 DATETIME

create_time DATETIME

范围:

1000-01-01
9999-12-31


2 TIMESTAMP

特点:

  • 自动记录时间
  • 占 4 字节
  • 时区相关

示例:

create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP

常用于:

创建时间
更新时间


五、枚举类型(ENUM)

ENUM 是 单选值类型

gender ENUM('male','female')

优点:

  • 节省空间
  • 限制合法值

缺点:

  • 修改比较麻烦

六、JSON 类型

从 MySQL 5.7 开始支持 JSON。

示例:

info JSON

存储:

{
  "name":"Tom",
  "age":20
}

查询:

SELECT info->'$.name' FROM users;

适合:

动态字段
配置数据
日志


七、二进制类型

用于存储文件或二进制数据。

类型用途
BLOB二进制数据
LONGBLOB大文件

示例:

file_data BLOB

一般用于:

图片
音频
文件

但实际开发通常存 文件路径


八、数据类型选择最佳实践

1 数值尽量用整数

price FLOAT

price DECIMAL(10,2)


2 VARCHAR 不要过大

VARCHAR(2000)

推荐:

VARCHAR(255)


3 ID 推荐 BIGINT

id BIGINT PRIMARY KEY AUTO_INCREMENT

适合高并发系统。


4 时间字段推荐

create_time DATETIME
update_time DATETIME


九、完整建表示例

CREATE TABLE users (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(100) NOT NULL,
    email VARCHAR(100),
    age TINYINT,
    balance DECIMAL(10,2),
    gender ENUM('male','female'),
    create_time DATETIME DEFAULT CURRENT_TIMESTAMP,
    update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);


十、开发中最常见数据类型

类型用途
BIGINTID
INT数量
VARCHAR文本
TEXT长文本
DECIMAL金额
DATETIME时间
JSON半结构数据

✅ 一句话总结

MySQL 数据类型选择原则:

整数用最小
字符串用 VARCHAR
金额用 DECIMAL
时间用 DATETIME
大文本用 TEXT


如果你愿意,我可以再给你一份 MySQL 数据库表设计规范(阿里巴巴版 + 大厂标准,面试和实际开发都在用)

文章已创建 5103

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

相关文章

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部