数据库数据类型

一、为什么"数据类型"是数据库设计的第一性问题

在数据库系统中,数据类型并不是语法细节,而是系统能力的边界定义

一个字段选择了什么类型,实际上同时决定了:

结论:数据类型 ≠ “值的格式”数据类型 = 存储模型 + 计算语义 + 比较规则 + 索引能力

这也是为什么数据类型选择错误,往往会在性能、正确性和系统演进中反复付出代价


二、数据类型的统一抽象模型(核心)

所有关系型数据库的数据类型,都可以映射到以下四个稳定维度:

1️⃣ 存储模型(Storage Model)

存储模型决定了 空间效率、IO 行为、UPDATE 成本


2️⃣ 比较与排序语义(Comparison Semantics)

比较语义决定了 ORDER BY、GROUP BY、JOIN 的行为正确性


3️⃣ 计算语义(Computation Semantics)

计算语义决定了 数据是否“可信”


4️⃣ 索引与查询能力(Indexability)

索引能力决定了 查询性能的上限


三、数值类型:精度、范围与可信计算

3.1 数值类型的本质分类

计算语义角度,数值类型只有两大类:

类型本质
精确数值用于“不能错”的计算
非精确数值用于“可以近似”的计算

3.2 精确数值类型(Exact)

代表:整数类、定点小数类

特征

工程哲学

凡是业务上“不能算错”的数据,必须使用精确类型


3.3 非精确数值类型(Approximate)

代表:浮点数

特征

工程哲学

浮点数适合科学计算,不适合业务账目


3.4 数值范围与 UNSIGNED 的意义

使用 UNSIGNED,等价于向系统声明:该字段不应出现负值


四、字符与二进制类型:存储、语义与索引

4.1 字符串类型的核心分歧

字符类型的核心差异不在“是否字符串”,而在:


4.2 定长 vs 变长

维度定长变长
存储固定按需
UPDATE低成本可能产生额外开销
空间效率
适用场景长度稳定长度不确定

本质权衡:空间效率 ↔ 更新成本 ↔ 访问局部性


4.3 二进制与非二进制字符串

影响


4.4 大字段(LOB)的工程含义

大字段类型的本质是:

“牺牲索引能力,换取容量”

工程原则:


五、时间与日期类型:时间语义而非格式

5.1 时间类型的核心问题

时间类型并不难,难的是时间语义


5.2 两种时间哲学

哲学含义
绝对时间与时区相关
业务时间与业务语义相关

时间类型选择,本质是对时间意义的建模选择


六、枚举与位类型:编码效率 vs 演进能力

6.1 枚举的本质

枚举并不是字符串优化,而是:

“用整数编码有限状态集合”

优点

代价


6.2 位与集合类型

当位含义超过 3~5 个,系统复杂度会急剧上升


七、序列与自增:并发系统中的顺序问题

7.1 序列生成的本质难题

生成序列并不难,难的是在以下约束下生成:

连续性、唯一性、性能,三者不可兼得


7.2 AUTO_INCREMENT 的工程定位

AUTO_INCREMENT 是一种:

在单机数据库内,平衡并发性能与顺序性的工程妥协方案

工程认知:


7.3 不连续 ID 的本质原因

关键结论

ID 的语义是“唯一标识”,不是“业务顺序”


八、数据类型选型的方法论(决策层)

8.1 类型选择的四问法

  1. 是否要求**计算绝对正确**
  2. 是否参与**排序 / JOIN / 索引**
  3. 是否需要**长期演进**
  4. 是否是**业务核心字段**

8.2 决策示例

总结:数据类型是数据库的“语言系统”

如果把数据库看成一种语言,那么数据类型就是它的语法与语义系统。

真正成熟的数据库设计,不是记住类型列表,而是理解每一种类型背后的取舍与哲学

关联内容(自动生成)