MySQL数据库:MySQL的数据类型

作为数据库,必然要存储很多信息。MySQL作为历史悠久的数据库,内部也有很多的数据类型。本期我们就来了解一下它们

目录

数值类型

数值类型表格

tinyint

bit

浮点数

float/double

decimal

字符串类型

char

varchar

char和varchar

共同点

区别

应用场景

日期与时间

enum/set

enum

set


数值类型

数值类型表格

类型分类 具体类型 说明 取值范围(有符号) 存储空间 示例
整数类型 TINYINT 很小的整数 -128 ~ 127 1 字节 age TINYINT
SMALLINT 较小的整数 -32,768 ~ 32,767 2 字节 count SMALLINT
MEDIUMINT 中等大小的整数 -8,388,608 ~ 8,388,607 3 字节 score MEDIUMINT
INT / INTEGER 标准整数 -2,147,483,648 ~ 2,147,483,647 4 字节 id INT
BIGINT 大整数 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 8 字节 big_num BIGINT
定点数 DECIMAL(M,D) / NUMERIC 精确小数(金额常用) 取决于 M,D 可变 price DECIMAL(10,2)
浮点数 FLOAT 单精度浮点数 ±1.175E-38 ~ ±3.402E+38 4 字节 weight FLOAT
DOUBLE 双精度浮点数 ±2.225E-308 ~ ±1.798E+308 8 字节 height DOUBLE
位类型 BIT(M) 位字段值 1 ~ 64 位 约 (M+7)/8 字节 flag BIT(1)

tinyint

我们先创建了一个tinyint类型的表

接下来查看数据库

向表中插入数据

查询表中数据

但是要注意数据范围。在C/C++中如果超范围了会截断变量值,但是在MySQL中会直接拒绝并报错。这样是为了让数据库的值是合法的且可预期的

bit

sql 复制代码
BIT(M)   -- M 为 1 到 64,表示存储的位数

创建一个存bit的表

插入数据

浮点数

float/double

sql 复制代码
FLOAT[(M,D)]        -- 单精度浮点数,M 为总位数,D 为小数位数(可选)
DOUBLE[(M,D)]       -- 双精度浮点数

MySQL中浮点数主要是四舍五入的

decimal

在 MySQL 中,DECIMAL 是一种定点数类型,用于精确存储和计算数值,特别适合货币等需要高精度的场景。

sql 复制代码
DECIMAL(M,D)    -- M 为总位数(精度),D 为小数位数(标度)
--M 最大 65,D 最大 30,且 D ≤ M

尽量避免decimal与浮点数整数直接计算,因为会导致decimal出现四舍五入

字符串类型

char

sql 复制代码
char(L);
-- 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值可以为255

创建一个限定3个字符的表并插入

MySQL中一个汉字是一个字符

varchar

sql 复制代码
varchar(L);
--可变长度字符串,L表示字符长度,最大长度65535个字节

varchar是可变字符串

char和varchar

共同点

特性 说明
定义语法 CHAR(M)VARCHAR(M),其中 M 表示最大字符数(非字节数)。
字符集支持 两者都支持多种字符集(如 utf8mb4),实际存储字节数受字符集影响。
比较行为 默认情况下,比较(=<> 等)时忽略尾部空格(符合 SQL 标准)。
最大长度 CHAR 最大 255 字符,VARCHAR 最大 65535 字符(受行大小限制和字符集影响)。
允许空值 均可定义为 NULLNOT NULL
索引支持 均可创建索引,但 VARCHAR 更常用前缀索引。

区别

对比维度 CHAR VARCHAR
存储方式 固定长度,右侧填充空格M 字符。 可变长度,存储实际字符数 + 1 或 2 字节长度前缀。
检索时尾部空格 默认移除 填充的空格(除非启用 PAD_CHAR_TO_FULL_LENGTH 模式)。 原样保留插入时的尾部空格。
存储效率 空间浪费于填充,适合长度固定的短字符串。 节省空间,适合长度变化大的字符串。
性能 更新时可能更稳定(长度固定,不易产生碎片)。 更新可能导致页分裂,但查询时更节省 I/O(数据更紧凑)。
最大长度 0--255 字符 0--65535 字符(实际受行大小限制)
典型用法 状态码、性别、MD5 值等固定长度标识。 用户名、标题、地址等长度不固定的文本。

应用场景

场景 推荐类型 原因
固定长度标识(如国家代码、MD5、Y/N) CHAR 长度固定,无空间浪费,且避免因填充空格导致的意外行为。
长度变化大的文本(如评论、地址) VARCHAR 节省存储空间,减少 I/O,且尾部空格原样保留符合用户预期。
需要频繁更新的短字符串(如状态) CHAR 固定长度,更新时不易引发行迁移或页分裂。
前缀搜索(如 LIKE 'abc%') VARCHAR 索引更高效,且实际长度短时占用更少索引空间。
存储用户输入且可能包含尾部空格 VARCHAR 保留原始空格,避免因 CHAR 自动移除导致的语义丢失。

日期与时间

MySQL 支持以下核心日期时间类型:

类型 格式 范围(含) 存储空间 精度
DATE YYYY-MM-DD 1000-01-019999-12-31 3 字节
TIME HH:MM:SS-HH:MM:SS -838:59:59838:59:59 3 字节 秒(可选微秒)
DATETIME YYYY-MM-DD HH:MM:SS 1000-01-01 00:00:009999-12-31 23:59:59 5-8 字节 秒/微秒(取决于小数精度)
TIMESTAMP YYYY-MM-DD HH:MM:SS 1970-01-01 00:00:01 UTC 到 2038-01-19 03:14:07 UTC 4 字节 秒/微秒
YEAR YYYY 19012155(或 0000 1 字节

enum/set

enum

sql 复制代码
CREATE TABLE t (
    gender ENUM('male', 'female', 'other')
);

定义时列出所有允许的字符串值。

内部存储为整数索引 (1, 2, 3, ...),对应列表顺序。
'male' 存储为 1,'female' 存储为 2,'other' 存储为 3。

最多可定义 65,535 个枚举元素(实际受列定义长度限制)。

set

sql 复制代码
CREATE TABLE t (
    interests SET('reading', 'music', 'sports', 'travel')
);

定义时列出所有可能的选项。

内部存储为位图(bitmap),每个选项对应一个位(第 1 位对应第一个元素,第 2 位对应第二个,依此类推)。

最多可定义 64 个元素(因为 64 位整数限制)。

实际存储为 1、2、3、4 或 8 字节,取决于元素个数(最多 8 字节)。

本期内容先到这里。

封面图自取:

相关推荐
2401_879693872 小时前
数据分析与科学计算
jvm·数据库·python
小陈phd2 小时前
系统架构师学习笔记(三)——计算机体系结构之存储系统
笔记·学习·系统架构
LJianK13 小时前
java封装
java·前端·数据库
Rsun045513 小时前
AI智能体学习路线
人工智能·学习
charlie1145141914 小时前
通用GUI编程技术——Win32 原生编程实战(十六)——Visual Studio 资源编辑器使用指南
开发语言·c++·ide·学习·gui·visual studio·win32
知识分享小能手4 小时前
MongoDB入门学习教程,从入门到精通,MongoDB查询(4)
数据库·学习·mongodb
weixin_409383124 小时前
godot等轴视角tilemaplayer的学习 isocheric的素材xy大小怎么调
学习·游戏引擎·godot
LSL666_4 小时前
MybatisPlus条件构造器(上)
java·数据库·mysql·mybatisplus
2201_754864784 小时前
学习日记(2026年3月23日)
学习