ukl*_*kll 23 postgresql datatypes storage postgresql-9.6
在 PostgreSQL 文档中,据说整数数据类型可以存储在两字节、四字节或八字节的空间中。我的数据库中表的一列包含一个一字节整数值,我希望它以一字节数据类型存储。
Erw*_*ter 28
不,Postgres 的标准发行版中没有 1 字节整数。标准 Postgres 的所有内置数字类型都占用 2 个或更多字节。
但是,是的,有扩展pguint,由 Postgres 核心开发人员之一 Peter Eisentraut 维护。它不是标准发行版的一部分:
除了各种无符号整数类型外,它还提供了您正在寻找的 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)
Run Code Online (Sandbox Code Playgroud)
请务必阅读链接站点上的“讨论”一章,解释可能出现的并发症。在引入更多整数类型时,您需要注意类型转换和数字文字......
一种可能的简单解决方法是将 1 字节整数值编码为"char"(带双引号!),一种“内部”简单的 1 字符类型,它实际上使用单字节存储,有符号 1 字节的字节值整数,上半部分表示为 ASCII 字符。
您可以对-128 到 127范围内的值进行编码。演示:
SELECT i
, i::"char"
, i::"char"::int
FROM generate_series(-128,127) i;
Run Code Online (Sandbox Code Playgroud)
有几个字符不适合显示。因此,在存储之前进行编码并在显示之前进行解码......
请记住:"char"是一种“内部”类型,用于简单和廉价的枚举。不是为我们在这里所做的事情而正式设计的,并且不能移植到其他 RDBMS。Postgres 项目不提供任何保证。但由于"char"在整个系统目录中使用,因此类型不会改变。
最初,我假设无符号 1 字节整数范围(0 到 255)并用作text垫脚石。但这仅适用于数字 1 - 127。相反,使用有符号整数范围(-128 到 127)"char"并integer直接在两者之间进行转换。
| 归档时间: |
|
| 查看次数: |
11129 次 |
| 最近记录: |