← [ BACK_TO_NOTES ]

MySQL 与 PostgreSQL 的数据类型差异

对比 MySQL 和 PostgreSQL 在数值、字符串、布尔、自增、JSON 和约束表达上的差异,帮助建模与迁移时少踩坑。

#synthesis #growing #backend #mysql #postgresql

[!info] related notes

MySQL 与 PostgreSQL 的数据类型差异

范围

这篇只聚焦“建模时最常碰到的类型与约束表达差异”,不展开所有厂商细节。

为什么要放在一起理解

很多“数据库可替换”的误判,都是从数据类型开始的:

  • 字段定义看起来相似,但约束能力不同
  • ORM 层映射看起来统一,但底层行为不同
  • 迁移脚本能过,不代表语义完全一致

依赖路径 / 调用链 / 演进链

最常见的对照维度:

  • 自增主键:MySQL 常见 AUTO_INCREMENT;PostgreSQL 常见 GENERATED ... AS IDENTITY 或历史上的 SERIAL
  • 布尔:PostgreSQL 原生 BOOLEAN 很自然;MySQL 常用 TINYINT(1) 语义映射
  • 枚举:MySQL 常见 ENUM;PostgreSQL 既可用 ENUM,也常用 CHECK 或独立类型
  • JSON:两者都支持,但 PostgreSQL 的 JSONB 在查询和索引上更强
  • 时间类型:两者都支持时间,但时区语义和默认写法需要格外小心

对比与易混淆点

维度MySQL 常见写法PostgreSQL 常见写法关注点
自增键AUTO_INCREMENTIDENTITY / SERIAL迁移和建表脚本不同
枚举ENUM 使用较多ENUM、CHECK、引用表更常见扩展与维护策略不同
JSONJSONJSON / JSONBPostgreSQL 的 JSONB 查询与索引能力更强
布尔常由 TINYINT(1) 映射原生 BOOLEANORM 映射时要看真实类型
数组支持弱原生数组较强PostgreSQL 表达力更高,但也更容易做出复杂 schema

不要把“都能存进去”误当成“语义完全等价”。

创建于 2026/5/3 更新于 2026/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本