POSTGRES 中的 numeric(9,0) 和 int 之间有什么区别?

JIT*_*HIN 4 postgresql

我试图将 java 类型映射到 SQL 类型,我遇到了这样的场景。

如果我详细说明,我auto-ddl在启动 spring 容器时使用api 将脚本应用于我的数据库。现在,我想生成使用脚本liquibase通过生成db-changelogPOSTGRE服务器。

Postgres 服务器中的 numeric(9,0) 和 INT 是否相同?请对此有所了解。

每种类型可以存储多少字节的数据?

Ber*_*rgi 8

不,它们不一样。

INT是一个 4 字节列,存储从 -2147483648 到 +2147483647 的整数值。

NUMERIC(9, 0)是一个 9 到 14 字节的列,存储从 -999999999 到 999999999 的整数值。


Pav*_*ule 6

Numeric(9, 0)并且INT在 Postgres 中是不同的类型。重要的区别是存储格式。类型numeric可以是 0..255 字节长,需要多少。类型修饰符(9, 0)对格式保存的数据没有影响,它只是最大长度的限制。

int type 每次都有固定长度 4 个字节,每个地方。

'999999999'的大小::数字

postgres=# 选择 pg_column_size('999999999'::numeric);
+----------------+
| pg_column_size |
+----------------+
| 12 |
+----------------+
(1 行)

注意一些对numeric类型的操作比对int类型慢。数字类型需要更多空间。这种类型设计用于处理大数字或精确数字。它不是设计为替代int类型。它不是标识列的好类型。对于其他数据库,Postgres 不会转换numeric(x, 0)intbigint