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
相关推荐
changshuaihua0014 小时前
Redis 详解:Redis 与 MySQL 的区别、数据类型与缓存三大问题
数据库·redis·缓存
qetfw4 小时前
Debian 配置 AIDE 文件完整性检测:基线初始化、变更检查与数据库更新
linux·网络·数据库·debian
Elastic 中国社区官方博客4 小时前
Elasticsearch:搜索教程 - 语义搜索(三)
大数据·数据库·人工智能·elasticsearch·搜索引擎·ai·全文检索
随风M记忆s6 小时前
Redis支持事务吗?了解Redis的持久化机制吗?
数据库·redis·bootstrap
花青泽7 小时前
5-数据库-SQL注入-联合查询-关键字绕过-day13
数据库·sql
天桥下的卖艺者13 小时前
使用scitable包,两步生成逆概率删失权重(IPCW)
数据库·r语言
隔窗听雨眠14 小时前
AI原生数据库浪潮:国产数据库的架构重构与路径之争
数据库
数据库小学妹14 小时前
数据库选型实战:从数据类型到TCO成本,五维决策框架+九款产品横评
数据库·信创·国产数据库·数据库选型·oracle迁移
神龙天舞200115 小时前
MySQL 备库为什么会延迟好几个小时
android·数据库·mysql
丙氨酸長鏈16 小时前
Web前端入门第 问:JavaScript 一个简单的 IndexedDB 数据库入门示例
前端·javascript·数据库