数据类型【TINYINT、SMALLINT、INT、BIGINT、decimal(18,2)】表示意思

数据类型 占用字节 占用位数 取值范围(有符号)
INT8 / TINYINT 1 字节 8 位 -128 到 +127
INT16 / SMALLINT 2 字节 16 位 -32,768 到 +32,767
INT32 / INT 4 字节 32 位 -21亿 到 +21亿
INT64 / BIGINT 8 字节 64 位 约 ±922亿亿

Q:TINYINT 就是1字节 为什么可以存-128 到127呢?

A:你说得非常对,TINYINT 确实只占用 1 个字节(即 8 个比特位)。

之所以能存储 -128 到 127 这么"不整齐"的范围,是因为计算机在存储有符号整数时,采用的是二进制补码(Two's Complement)规则,而不是我们直觉中的"原码"。

这里有三个关键点可以帮你理解:

8 个比特位的排列组合

1 字节 = 8 位。每一位可以是 0 或 1,所以总共能表示的状态数是 2^8 = 256 种。

如果是无符号(unsigned)类型,这 256 个状态全部用来表示正数,范围就是 0 到 255。

但在有符号(signed)类型中,我们需要表示负数。最左边的那一位(最高位)被规定为符号位:

0 开头表示正数。

1 开头表示负数。

为什么不是 -127 到 127?

你可能会觉得,既然有一位用来做符号了,剩下的 7 位表示数值(2^7=128),范围应该是 -127 到 +127(共 255 个数)。

这里有两个关键原因导致范围变成了 -128 到 127:

原因一:0 的位置

在计算机中,0 被视为正数(或者说非负数),它的二进制是 0000 0000。

这意味着,正数阵营里,0 占用了一个名额。所以正数剩下的名额只有 127 个(从 1 到 127)。

如果不把 0 算在负数里,正数那边就比负数多占了一个位置,为了平衡,负数那边必须多"借"一个位置。

原因二:补码的"负零"机制(核心原因)

这是最根本的原因。在补码规则中,二进制 1000 0000 被定义为 -128,而不是 -0。

复制代码
让我们看看具体的对应关系:
0111 1111 = +127 (最大值)
0000 0001 = +1
0000 0000 = 0
1111 1111 = -1
1000 0001 = -127
1000 0000 = -128 (最小值)

总结

因为计算机利用 1000 0000 这个特殊的组合来表示 -128,而不是浪费它来表示"负零",所以负数那边能存到 -128,而正数那边因为包含了 0,最大值只能到 127。

套用到 TINYINT (n=1):

最小值:-2^7 = -128

最大值:2^7 - 1 = 127

deciaml (18,2) 是什么意思

DECIMAL(18, 2) 是数据库中一种用于存储精确数值的数据类型,常用于需要高精度的场景,比如金融领域的金额计算。

简单来说,它的含义是:总共可以存储 18 位数字,其中小数点后固定保留 2 位。

📝 参数详解

DECIMAL(p, s) 由两个参数定义:

p (Precision / 精度):代表数字的总位数,包括小数点左边(整数部分)和右边(小数部分)的所有数字。在你的例子中,p 是 18。

s (Scale / 标度):代表小数点后可以存储的位数。在你的例子中,s 是 2。

💡 以 DECIMAL(18, 2) 为例

根据上面的定义,我们可以算出它的存储能力:

总位数:18 位。

小数位数:2 位。

整数位数:总位数 - 小数位数 = 18 - 2 = 16 位。

这意味着,使用 DECIMAL(18, 2) 的字段:

最大值:9999999999999999.99 (16个9 + .99)

最小值:-9999999999999999.99

✨ 主要特点

精确存储:与 FLOAT 或 DOUBLE 不同,DECIMAL 是一种定点数类型,它能精确地存储你输入的数值,不会因为二进制转换而产生微小的精度误差。例如,0.1 + 0.2 的结果就是精确的 0.3,而不是 0.30000000000000004。

自动补零:如果你插入的数字小数位不足 2 位,数据库会自动补零。例如,插入 123 会被存储为 123.00。

四舍五入:如果你插入的数字小数位超过 2 位,数据库通常会进行四舍五入。例如,插入 1.237 会被存储为 1.24。

📊 适用场景

由于其精确性,DECIMAL 类型是存储以下数据的理想选择:

货币金额:商品的价格、账户余额、交易流水等。

科学数据:需要固定精度的实验测量值。

税率、利率:任何不允许有计算误差的百分比数值。

相关推荐
IvorySQL3 分钟前
PostgreSQL 日报|复制槽泄漏修复(8 月 6 日)
数据库·postgresql
XWalnut4 分钟前
MySQL入门到精通
数据库·mysql
@Mike@19 分钟前
07-数据库学习笔记(数据库哈希表)
数据库·哈希算法·散列表
喜欢的名字被抢了27 分钟前
FastAPI 接入异步 PostgreSQL 完成任务 CRUD 与数据库迁移
数据库·postgresql·fastapi
Goodbye39 分钟前
给 AI 装上记忆:基于 Milvus 向量数据库与 RAG 的智能日记系统实战
数据库
九皇叔叔44 分钟前
RHEL 9.8 安装 Redis 8.8.1
数据库·redis·bootstrap
Python私教44 分钟前
如意 Django CRM 容器化实战:后端、前端、数据库、Redis 的协同启动逻辑
前端·数据库·django
海兰1 小时前
【数据库】tdsql(MySQL )的事务隔离级别
android·数据库·mysql
小蒜学长2 小时前
“守望自然”招募志愿者环保行动网站的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端
灵析表格2 小时前
Excel连接MySQL的函数化革命:灵析表格MySQL函数族业务应用分析
数据库·mysql·adb·excel·wps·灵析表格·excel公式盒子