Amazon Redshift中的未签名字段?

问题描述 投票:5回答:2

我正在寻找一种方法来创建一个无符号整数的表(我知道我只有正整数,所以为什么不增加两倍的范围)。要创建一个整数字段,我会这样做:

create table funny_table(
    my_field bigint
);

所以我认为使用my_field bigint unsigned将解决我的问题,但语法错误告诉我否则。虽然看起来documentation没有说明无符号整数。它甚至可能吗?

amazon-redshift
2个回答
2
投票

不幸的是,Amazon Redshift不支持无符号整数。作为一种解决方法,我们使用numeric(20,0)来获取bigint unsigned数据。这是一个例子。

create table funny_table(
    my_field numeric(20, 0)
);
insert into funny_table values ( 18446744073709551614 );
select * from funny_table;
       my_field
----------------------
 18446744073709551614
(1 row)

有关数字类型的详细信息,请参阅here


1
投票

如前所述,Redshift不支持unsigned。鉴于此,请仔细了解您需要实现的目标。

bigint占据8个字节,其中包含-9223372036854775808至9223372036854775807

numeric占用128位(可变,最多128位),但以内存为代价提供更大的范围。

我相信使用unsigned背后的想法是在不增加额外费用的情况下将范围扩大一倍。因此,如果你对2^63 - 1的最高正值感到满意,请使用bigint并忘记unsigned,因为它无论如何都需要8个字节。

如果你有更大的正整数,请使用numeric(20, 0)(或更高的精度),但你需要知道它仍然是有符号的并占用超过8个字节。

© www.soinside.com 2019 - 2024. All rights reserved.