在Postgres中NUMERIC(9,0)和INT是一样的吗?每种类型可以存储多少字节的数据?背景:在启动Spring容器时,我使用auto-ddl API将脚本应用到数据库。现在,我尝试通过为POSTGRES服务器生成db-changelog来使用liquibase生成脚本。
NUMERIC(9,0)
INT
auto-ddl
POSTGRES
db-changelog
liquibase
1bqhqjot1#
NUMERIC(9, 0)和INT在Postgres中是不同的类型。重要的区别在于存储格式。numeric类型可以根据需要在0到255字节之间。类型修饰符(9, 0)对保存数据的格式没有影响,它只是最大长度的限制。INT类型具有4个字节的固定长度。'999999999'::numeric的大小:
NUMERIC(9, 0)
numeric
(9, 0)
'999999999'::numeric
postgres=# select pg_column_size('999999999'::numeric); +----------------+ | pg_column_size | +----------------+ | 12 | +----------------+ (1 row)
NUMERIC
Postgres不会将NUMERIC(x, 0)转换为INT或BIGINT。
NUMERIC(x, 0)
BIGINT
luaexgnf2#
不,它们不一样。INT是一个4字节的列,存储从-2147483648到+2147483647的整数值。NUMERIC(9, 0)是一个9到14字节得列,存储从-999999999到99999999得整数值.
2条答案
按热度按时间1bqhqjot1#
NUMERIC(9, 0)
和INT
在Postgres中是不同的类型。重要的区别在于存储格式。numeric
类型可以根据需要在0到255字节之间。类型修饰符(9, 0)
对保存数据的格式没有影响,它只是最大长度的限制。INT
类型具有4个字节的固定长度。'999999999'::numeric
的大小:NUMERIC
类型上的某些操作比INT
类型上的慢。NUMERIC
类型需要更多空间;它是为处理大数字或精确数字而设计的。它不是为取代INT
类型而设计的。Postgres不会将
NUMERIC(x, 0)
转换为INT
或BIGINT
。luaexgnf2#
不,它们不一样。
INT
是一个4字节的列,存储从-2147483648到+2147483647的整数值。NUMERIC(9, 0)
是一个9到14字节得列,存储从-999999999到99999999得整数值.