数据类型【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 类型是存储以下数据的理想选择:

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

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

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

相关推荐
倔强的石头_10 小时前
《Kingbase护城河》——数据库存储空间全景探测与精细化瘦身实战
数据库
冬奇Lab1 天前
每日一个开源项目(第134篇):Zvec - 阿里开源的嵌入式向量数据库,向量搜索界的 SQLite
数据库·人工智能·llm
ClouGence1 天前
Oracle CDC 架构优化:从主库直连到 DataGuard 备库同步
数据库·后端·oracle
无响应de神2 天前
三、用户与权限管理
数据库·mysql
麦聪聊数据2 天前
数据服务化时代:企业数据能力输出的核心路径
数据库
shushangyun_2 天前
2026年快消品B2B系统推荐:支持终端门店订货、促销政策自动化的工具?
java·运维·网络·数据库·人工智能·spring·自动化
DARLING Zero two♡2 天前
【MySQL数据库】数据类型与表约束
数据库·mysql
曹牧2 天前
Oracle EXPLAIN PLAN
数据库·oracle
BD_Marathon2 天前
SQL学习指南——视图
数据库·sql
活宝小娜2 天前
mysql详细安装教程
数据库·mysql·adb