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
相关推荐
BomanGe11 小时前
NSK W1501FA高速精密滚珠丝杠技术手册
数据库·经验分享·规格说明书
kiki-bf1 小时前
可用的mysql本地安装教程
数据库·mysql
携程DBA2 小时前
数据库软限制相关研究
linux·mysql·性能
多巴胺梦想家2 小时前
数据库恢复技术:当灾难来临
网络·数据库·oracle
Anokata2 小时前
MYSQL SQL 执行系列2
mysql
北冥you鱼3 小时前
Go 语言初始化 MySQL 数据库实战指南:从零到生产环境部署
数据库·mysql·golang
SelectDB3 小时前
云数仓费钱?用 SelectDB Serverless 三步配出秒级弹性,最高降本 70%
数据库·云原生·数据分析
琢森3 小时前
服务器崩溃后,我是怎么用一条备份脚本救回全部数据的
mysql
time展天13 小时前
Dddify:给 ASP.NET Core 项目一套轻量、清晰、可落地的 DDD 基础设施
数据库·后端·asp.net
杜子不疼.3 小时前
【Qt初识】工程起步:项目创建、代码解读与对象树
数据库·c++·qt