Answers:
不,在Postgres的标准发行版中没有1字节的整数。标准Postgres的所有内置数字类型都占用2个或更多字节。
但是,有扩展pguint,由彼得·Eisentraut的Postgres的核心开发者之一维护。它不属于标准发行版:
除了各种无符号整数类型,它还提供您要查找的1字节整数:
int1 (signed 8-bit integer)
uint1 (unsigned 8-bit integer)
uint2 (unsigned 16-bit integer)
uint4 (unsigned 32-bit integer)
uint8 (unsigned 64-bit integer)
请务必阅读链接站点上的“讨论”一章,以解释可能的并发症。引入更多整数类型时,需要小心使用类型转换和数字文字。
一种可能的简单解决方法是将1字节整数值编码为"char"
“内部”简化的1字符类型,该类型实际上使用单个存储字节,即带符号的1字节整数的字节值,上半部表示为ASCII字符。
您可以对-128到127范围内的值进行编码。演示:
SELECT i
, i::"char"
, i::"char"::int
FROM generate_series(-128,127) i;
有几个字符不适合显示。因此在存储之前先编码,在显示之前先解码 ...
请记住:"char"
是一种“内部”类型,旨在进行简单且廉价的枚举。没有为我们在此所做的工作而正式设计,并且不能移植到其他RDBMS。Postgres项目对此没有任何保证。
我最初的建议是粗心大意的,基于这样的假设:我们将覆盖一个无符号的1字节整数(0-255)的范围,并且可以text
用作垫脚石。埃文(Evan)指出了我的错误方式:该错误仅适用于1-127号,其余错误。相反,请使用-128到127之间的整数范围,并在"char"
和之间强制转换以integer
直接解决这两个问题。