mysql数据类型

什么是数据类型

在 MySQL 里面:

数据类型决定了这一列能存什么数据。

比如:

  • 年龄 → 整数
  • 姓名 → 字符串
  • 生日 → 日期
  • 工资 → 小数

所以创建表时:

sql 复制代码
CREATE TABLE student(
    name VARCHAR(20),
    age INT
);

这里:

  • VARCHAR(20) 表示字符串
  • INT 表示整数

一、数值类型

数值类型就是:

存数字。

MySQL 中最常用的是:

类型 作用
TINYINT 很小的整数
INT 普通整数
BIGINT 大整数
FLOAT 单精度小数
DOUBLE 双精度小数
DECIMAL 精确小数

二、整数类型

1. TINYINT

占 1 个字节。

范围很小。

sql 复制代码
age TINYINT

适合:

  • 年龄
  • 性别
  • 状态位

因为范围够用,而且省空间。


2. INT

最常用的整数类型。

占 4 个字节。

sql 复制代码
id INT
score INT

开发里:

大部分整数都直接用 INT。


3. BIGINT

超大整数。

占 8 个字节。

sql 复制代码
qq BIGINT
phone BIGINT

适合:

  • QQ号
  • 雪花算法ID
  • 大数据编号

现在很多项目主键都开始用 BIGINT。


三、小数类型

1. FLOAT

单精度浮点数。

sql 复制代码
price FLOAT

优点:

  • 节省空间

缺点:

  • 不精确

所以:

金额一般不用 FLOAT。

因为可能出现:

txt 复制代码
0.1 + 0.2 ≠ 0.3

2. DOUBLE

双精度浮点数。

比 FLOAT 更精确。

sql 复制代码
height DOUBLE

但依然存在精度问题。


3. DECIMAL(重点)

精确小数。

开发里:

金额必须用 DECIMAL。

语法:

sql 复制代码
DECIMAL(总位数, 小数位数)

例如:

sql 复制代码
salary DECIMAL(10,2)

表示:

txt 复制代码
总共 10 位
其中 2 位小数

能存:

txt 复制代码
12345678.99

不能存:

txt 复制代码
123456789.99

因为超位数了。


四、字符串类型

最常用。

类型 作用
CHAR 定长字符串
VARCHAR 变长字符串
TEXT 长文本

五、CHAR 和 VARCHAR

这是面试高频。


1. CHAR

定长字符串。

sql 复制代码
name CHAR(10)

无论存:

txt 复制代码
a

还是:

txt 复制代码
abcdef

都会占满 10 个字符空间。

特点:

  • 查询速度快
  • 浪费空间

适合:

  • 性别
  • 身份证固定长度
  • 手机号固定长度

2. VARCHAR(重点)

变长字符串。

sql 复制代码
name VARCHAR(20)

如果存:

txt 复制代码
abc

只占 3 个字符长度。

特点:

  • 节省空间
  • 开发最常用

现在开发里:

基本默认 VARCHAR。


3. CHAR 和 VARCHAR 区别

类型 CHAR VARCHAR
长度 固定 可变
空间 浪费 节省
速度 稍慢
场景 固定长度 普通字符串

六、TEXT 类型

存大文本。

sql 复制代码
content TEXT

适合:

  • 博客内容
  • 文章
  • 评论
  • 富文本

因为 VARCHAR 长度有限。

TEXT 可以存很多字符。


七、日期时间类型

类型 作用
DATE 日期
TIME 时间
DATETIME 日期时间
TIMESTAMP 时间戳

八、DATE

只存日期。

格式:

txt 复制代码
YYYY-MM-DD

例如:

sql 复制代码
birthday DATE

存:

txt 复制代码
2026-05-08

九、TIME

只存时间。

格式:

txt 复制代码
HH:MM:SS

例如:

sql 复制代码
start_time TIME

存:

txt 复制代码
12:30:45

十、DATETIME(重点)

存日期 + 时间。

格式:

txt 复制代码
YYYY-MM-DD HH:MM:SS

例如:

sql 复制代码
create_time DATETIME

存:

txt 复制代码
2026-05-08 12:30:45

开发里非常常见。


十一、TIMESTAMP

也是日期时间。

但是:

它和时区有关。

并且:

  • 占用空间更小
  • 自动更新时间

很多项目会这样:

sql 复制代码
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP

表示:

插入数据时自动记录当前时间。


十二、常见字段设计

用户表

sql 复制代码
CREATE TABLE user(
    id BIGINT,
    username VARCHAR(30),
    password VARCHAR(100),
    age TINYINT,
    salary DECIMAL(10,2),
    create_time DATETIME
);

这里:

字段 类型原因
id BIGINT 主键
username VARCHAR 字符串
password VARCHAR
age TINYINT 足够
salary DECIMAL 防止精度问题
create_time DATETIME

十三、开发中最常用的数据类型

真正开发里高频就这些:

类型 用途
INT 普通整数
BIGINT 主键ID
VARCHAR 字符串
DECIMAL 金额
DATETIME 时间
TEXT 大文本

把这几个掌握:

基本已经够用了。


十四、面试高频问题

1. 金额为什么不用 FLOAT?

因为 FLOAT 存在精度丢失。

金额必须精确。

所以:

sql 复制代码
DECIMAL

才是标准方案。


2. VARCHAR(20) 的 20 是什么?

表示:

最多存 20 个字符。

不是字节。


3. CHAR 和 VARCHAR 怎么选?

固定长度:

txt 复制代码
CHAR

普通字符串:

txt 复制代码
VARCHAR

开发里基本默认:

txt 复制代码
VARCHAR

十五、核心总结

MySQL 数据类型主要分三类:

类型 作用
数值类型 存数字
字符串类型 存文本
日期类型 存时间

开发里最重要的:

sql 复制代码
INT
BIGINT
VARCHAR
DECIMAL
DATETIME
TEXT
相关推荐
zandy10113 分钟前
衡石科技 NL2Metrics 技术深度解析(2026):ChatBI 准确度破局的关键路径
数据库·科技·oracle
Elastic 中国社区官方博客4 分钟前
Elasticsearch 如何通过 synthetic _id 和 Bloom filters 将时序存储降低 34%
大数据·数据库·elasticsearch·搜索引擎·serverless·全文检索·时序数据库
一只鹿鹿鹿18 分钟前
信息化项目管理规范(参考Word文件)
java·大数据·运维·开发语言·数据库
这个DBA有点耶20 分钟前
多模融合数据库深度解析:关系、文档、向量、图如何统一?
数据库·自然语言处理·aigc·dba·改行学it
anew___38 分钟前
《数据库原理》精要解读(三)—— SQL:与数据库对话的艺术
数据库·sql·oracle
KaiwuDB38 分钟前
KWDB 3.2.0 版本发布,数据管理查询增强,安装部署体验全面升级
数据库
暴躁小师兄数据学院1 小时前
【AI大数据工程师特训笔记】第10讲:数据库用户、权限管理、数据库约束
大数据·数据库·笔记·sql·postgresql
凤山老林1 小时前
DDD(领域驱动设计)在复杂业务系统中的落地指南
java·开发语言·数据库·ddd·领域驱动
凯瑟琳.奥古斯特1 小时前
子查询原理与实战案例解析
开发语言·数据库·职场和发展·数据库开发