Postgresql
如何在 PostgreSQL 中儲存一字節整數?
在 PostgreSQL 文件中,據說整數數據類型可以儲存在 2、4 或 8 字節空間中。我的數據庫中表的一列包含一個單字節整數值,我希望它以單字節數據類型儲存。
- 在 PostgreSQL 中是否有使用單字節整數數據類型的擴展或方法?
- NUMERIC(1,0) 是多少字節?
不,Postgres 的標準發行版中沒有 1 字節整數。標準 Postgres 的所有內置數字類型都佔用 2 個或更多字節。
擴展 pguint
但是,是的,有擴展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)
請務必閱讀連結站點上的“討論”一章,解釋可能的並發症。在引入更多整數類型時,您需要小心類型轉換和數字文字……
部分解決方法
一種可能的簡單解決方法是將 1 字節整數值編碼為(使用雙引號!),這是一種“內部”簡單的 1 字元類型,它實際上使用單字節 storage。直到 Postgres 9.5,它涵蓋了帶符號的 1 字節整數的字節值(十進制範圍為 -128 到 127)。但此後它已被收緊,僅涵蓋以 ASCII 字元表示的正數。所以只有單字節整數範圍的一半。
"char"
您可以對0 到 127範圍內的值進行編碼:
SELECT i , i::"char" , i::"char"::int FROM generate_series(0,127) i;
db<>在這裡擺弄
有幾個字元不適合顯示。因此,在儲存之前進行編碼,在顯示之前進行**解碼。
請記住:
"char"
是一種“內部”類型,用於簡單而廉價的列舉。不是為我們在這裡所做的事情而正式設計的,也不能移植到其他 RDBMS。Postgres 項目不提供任何保證。但由於"char"
在整個系統目錄中使用,類型不會改變。您也可以從 進行
text
轉換,因為負數已被排除。