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
相关推荐
wang3zc2 小时前
如何正确管理浮层提示(Tooltip)显示时的页面焦点顺序
jvm·数据库·python
2401_824222692 小时前
如何导出Laravel特定时间段的订单数据 基于created_at过滤导出
jvm·数据库·python
2501_901200532 小时前
进阶设计指南之如何打印分页与自适应ER图_支持高级扩展类型
jvm·数据库·python
m0_609160492 小时前
C#怎么实现HttpClient最佳实践 C#如何用IHttpClientFactory管理HttpClient避免端口耗尽【网络】
jvm·数据库·python
南境十里·墨染春水2 小时前
linux 学习进展 mysql 事务详解
linux·学习·mysql
zjy277772 小时前
Quill 编辑器光标意外跳转至顶部的解决方案
jvm·数据库·python
2301_766283442 小时前
MySQL数据误删除后如何快速恢复_基于binlog日志的闪回操作
jvm·数据库·python
duke8692672142 小时前
Bootstrap中常用的文本颜色、背景颜色及边框色类
jvm·数据库·python
m0_740352422 小时前
React 中的渲染(Rendering)机制详解.txt
jvm·数据库·python