關於資料庫number與integer型別的區別

2021-06-16 10:08:26 字數 1239 閱讀 1256

引自:

留意oracle中integer和number的區別;

建表的時候,如果是浮點數,一般設定為 number(m,n )[m為精度,n為小數字數,所以整數為m-n位],  整數設定為integer;

比如:create table abc

(  a number(38,0),

b number(38)

c integer,

d number )

那麼a,b,c,d 分別有什麼區別呢?

a,b其實是一樣的,都是38位的範圍;

c是不是和a,b一樣呢?測試後是不一樣的,c的最大值可以達到9e125,顯然遠遠地大於38位的範圍;

d和a,b,c有什麼區別呢,首先d可以放小數,另外它的範圍同樣遠遠大於38位;

具體這a,b,c,d四種型別的明確差異,我也說不清楚,希望有專家把它解釋清楚,我這裡只是拋磚引玉。

以前我一直以為 integer=number(38,0) --38是number的最大精度

剛才無意中發現integer 是個超大的資料型別,最大可以表示為power(10,126)-1

也就是說這麼大的數字,大概需要多少個位元組呢,

因為乙個位元組最大表示256,那麼n個位元組最大表示power(256,n)>=power(10,126)

現在求這個n:解法是:

select  log(256,10)*126   from dual

求得的解是 53, 也就是說,乙個integer型別最少使用53個位元組。

所以我覺得integer型別還是盡量少用,一般很少用到這麼大的數字;

特別是某些人對於boolean型別的處理;

因為oracle的表結構中沒有布林型別,所以很多人乾脆用integer 代替布林型別,這個感覺有點「奢侈」;

我一般都用char(1)表示布林型;'0'表示false,'1'表示true

另外,比如varchar2(200)這個型別,它是動態分配的,所以字串按實際使用的占用空間,但是integer卻是固定暫用了最少53個位元組,所以大部分時候,integer 型別還是不用為妙;

就算在pl/sql 裡;

定義變數的時候,也不要使用integer;

可以用binary_integer 或pls_integer ;11g裡還出了個新的整形,效率更高,叫******_integer,反正最好不用integer就是了。

效率測試下來:******_integer>pls_integer>binary_integer>integer;

Oracle資料庫修改Number欄位屬性

在oracle資料庫中,我們會因為一些需求或其他原因要修改資料庫的字段屬性,但是直接用語句 alter table test table modify test age number 3 default null 會出現以下的錯誤日誌 這是因為資料庫中,該列已經有資料了,我們需要寫以下語句就能解決此...

資料庫number(4,3)表示什麼

1 你看 number 4,3 是表示 這個數 一共有4位是有效位,後面的3 表示有3個是小數 也就是這個數 只能是1.234,這樣格式的 最大只能是9.999,2 number 3,4 表示這個數 有效位數是3位 但是有四位小數 也就是只能是這個格式0.0123 最大只能是0.0999 3 num...

關於儲存 資料庫與架構

去年,我們曾經使用了一批ssd的pc,用來做資料庫的伺服器,用來提高資料庫伺服器的io能力。但是從目前的使用情況來看,如果將ssd作為主儲存,存在一些問題 首先,ssd的穩定性還不夠好,我們碰到了一些ssd盤損壞和ssd與機器不相容的情況發生。第二,ssd的容量盤都比較小,考慮到穩定性的問題,如果做...