2012-09-09 55 views
1

是否有比smallint(16bit)更小的數據類型?我需要一個只有1到31的數字的列,所以我認爲5bits足夠了,我不想浪費空間,每個元組的開銷爲11位。PostgreSQL:小於smallint的數據類型?

+2

你可能會找到答案的http://stackoverflow.com/questions/3090138/is-it-possible-to-store -a-1-byte-number-in-postgres有幫助。 – daxelrod

回答

3

docs有沒有這樣的1個字節的整數,所以我認爲最好的方法是用小INT。如果你不考慮做任何數學運算,你也可以使用varchar(2)(但這不是最好的想法)。

2

這是一個實際的擔憂?浪費了多少磁盤和內存?您是否準備好對數據類型進行此類更改所需的任何可能的減速或代碼更改?

如果是肯定的,看看bit string types

+0

在PostgreSQL中,一個5位的位串需要6個字節 - 1個字節的值加上5個字節的開銷。 –

+0

爲什麼這個奇怪的行爲? – tyranitar

1

如果您需要31 而不是31個數字,您可以使用CHAR(1)和CHECK()約束。

your_column char(1) not null 
    check (your_column in ('a','b','c'...'z','1','2','3','4','5')) 

但我不認爲這是一個好主意。 (5位「類型」往往會被無論如何填充至8位邊界)。

相關問題