MySQL数据类型

本文只是提炼重点。只会说到常用的数据类型。

整数类型

一般整数类型用的都是 int。
int 占用 4个字节。一字节 8位,所以 int 总共是 32 位(4 × 8)。

bash 复制代码
比如 1
00000000 00000000 00000000 00000001

有符号数和无符号数的核心区别在于最高位(符号位)的用途。对于有符号数,最高位为 0 表示正数,为 1 表示负数;而无符号数的所有位都用于表示数值大小。

无符号数取值范围 有符号数取值范围
0 ~ 2³²-1 -2³¹ ~ 2³¹-1

定点数类型

DECIMAL(M, D) 存储空间取决于M和D

M表示该小数最多需要的十进制有效数字个数。

D表示该小数的小数点后的十进制数字个数。

以 DECIMAL(12,2) 为例,它表示该数值总共最多有 12 位有效数字,其中小数点后占 2 位。因此,整数部分最多可以有 10 位(12 - 2)。

bash 复制代码
99 十进制数 需要装进二进制 怎么做?
一个字节能存进去吗?能
一个字节的范围是 0 ~ 255对吧
1111 1111 = 255

我们把小数点前后拆分。9位分为一组。

小数点前面 1 为 一组 ,一共有 1位 需要用一个字节。

小数点后面 01 为 一组 ,一共有 2位 需要用一个字节。

一共存储这个数据需要 两个个字节。

bash 复制代码
那么如果我的数据类型是这样的DECIMAL(12,2)
000000000 0 , 00
    4     1    1
一共六个字节。

DECIMAL 的存储空间按字段定义 DECIMAL(M,D) 来算

字符类型

M 是什么?M是字符数。

一个字节表示一个字符?

还是多个字节 表示一个字符?

中文字符英文字符 如何通过字节表示?

是由字符集决定的,字符集有哪些 UTF-8 GBK等。

VARCHAR(100) 中的 100 = 最多 100 个字符

W = 当前字符集下每个字符最多占多少字节

utf8mb4 字符集 W 为 4

100 x 4 = 400

bash 复制代码
当M×W < 256时,只需要一个字节来表示占用的字节数。
当M×W >= 256且M×W < 65536时,需要两个字节来表示占用的字节数。
  1. 按 utf8mb4 字符集,把 "小王" 编码成字节,实际是 6 字节。
  2. 因为字段定义是 VARCHAR(100) utf8mb4,最大可能 400 字节,所以需要 2 字节记录真实长度。
  3. 最后占用大约是:2 + 6 = 8 字节。

日期类型

MySQL 5.6.4 之后,DATETIME 固定占用 5个字节。
2026-05-17 20:43:41.xxxxxxx

如果采用十进制 装入 二进制的方式。

bash 复制代码
xxxxxx
.123456 秒
= 123456 微秒
= 123 毫秒 + 456 微秒

存储方式采用的是十进制插入二进制的方式。

假如datetime(2) 小数点后面就占用1个字节。

小数点前面就是5个字节。

如果把 2026-05-17 20:43:41.xxxxxxx拆分成年 月 日 来存放的话。也就是十进制存放的话。

2026 2个字节 05 1个字节 ...

不对。为了节省空间,05 通过 101 三个比特位就能表示。

部分 范围 大概要多少 bit
月 1~12 4 bit 就够
日 1~31 5 bit 就够
时 0~23 5 bit 就够
分 0~59 6 bit 就够
秒 0~59 6 bit 就够

VARCHAR 是"变长字符串":实际字符编码后有多长,就存多少字节,再加长度前缀。
DATETIME 是"固定结构时间":年月日时分秒都有固定范围,所以 MySQL 可以把它们压缩打包到 5 字节里。

二进制类型

CLOB(5000) 5000是字符。

BLOB(5000) 5000是字节。

后续再补充

相关推荐
Decay__4 小时前
05_MySQL 常用 SQL 大全 —— 诊断、管理、优化辅助 SQL 与三大系统库速查
运维·数据库·sql·mysql·架构
小徐不徐说8 小时前
C++ 接口与插件设计:从工厂注册到 Qt 动态插件
数据库·c++·qt·系统架构·程序设计
论文复现现场9 小时前
WRF、FEA 能用 L40S 加速吗?求解器检查、断点恢复与长期运行
java·数据库·算法·wrf·有限元分析·gpu计算·断点续算
Decay__10 小时前
04_MySQL DBA 日常运维手册 —— 会话管理、锁与阻塞、事务监控、慢查询与日志巡检
运维·数据库·sql·mysql·架构
心梦缘-雪雁11 小时前
SQL Server 查询数据存在哪个表里
数据库
lusklusklusk12 小时前
Python 巡检脚本:进程运行状态、数据库写入时效检查及邮件通知与告警
数据库·python·oracle
GeW12 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
SelectDB12 小时前
Doris Arrow Flight SQL 高速读取协议实战:与 Snowflake 客户端取数链路对照
大数据·数据库·数据分析
曼岛_12 小时前
[图解密码学]第4章 古典密码
java·数据库·密码学
瀚高PG实验室13 小时前
HGDB V9.0.5 .pgpass 免密登录提示 IsEncryptNon-base64 encoding 警告处理
数据库·postgresql·瀚高数据库