1. PostgreSQL 原生 boolean(true/false/NULL 三值)与 MySQL 用 TINYINT(1) 模拟布尔在存储、比较语义与驱动映射(JDBC tinyInt1isBit)上有何差异与迁移陷阱?
请说明 PostgreSQL 原生 boolean 与 MySQL 用 TINYINT(1) 模拟布尔在存储、比较语义与驱动映射上的差异及迁移陷阱?
- 原生 boolean vs TINYINT(1)
- 三值逻辑
- JDBC tinyInt1isBit
PostgreSQL 有原生 boolean 类型,值为 true/false/NULL,比较语义是三值逻辑;MySQL 没有原生 boolean,用 TINYINT(1) 存 0/1 模拟,比较语义是整数。差异:PG 存 true/false、MySQL 存 0/1;驱动映射上,MySQL JDBC 的 tinyInt1isBit 参数决定 TINYINT(1) 是否映射为 Java boolean(默认 true 映射为 boolean,否则为 Integer)。迁移陷阱:PG 的 boolean 迁移到 MySQL 需转 0/1,WHERE 条件与布尔运算语义变化;MySQL 的 TINYINT(1) 迁移到 PG 需转 boolean,且 NULL 与三值逻辑需注意。
核心是"原生布尔 vs 整数模拟"的存储与语义差异,以及 JDBC 参数对映射的影响。