鍍金池/ 問(wèn)答/人工智能  數(shù)據(jù)庫(kù)  網(wǎng)絡(luò)安全/ postgresql的int4類型為什么長(zhǎng)度可以達(dá)到10位

postgresql的int4類型為什么長(zhǎng)度可以達(dá)到10位

兩個(gè)問(wèn)題:

  1. postgresql的int4類型為什么長(zhǎng)度可以達(dá)到10位,但是屬性中設(shè)定是32位
  2. postgresql的int4類型長(zhǎng)度默認(rèn)設(shè)定32位,為什么修改不了,修改后還是32位

附截圖:

這是表結(jié)構(gòu)中int4 的數(shù)據(jù)屬性
圖片描述

這是小白我意圖修改為11位的操作,最終還是32位,很無(wú)語(yǔ)
圖片描述

這是修改為10位長(zhǎng)度的數(shù)值,保存成功
圖片描述

這是小白我意圖修改為11位長(zhǎng)度的操作,提示超出范圍
圖片描述

回答
編輯回答
紓惘

用NaviCat連PG? 還有這種操作?

言歸正傳??雌饋?lái)像是GUI工具上的一些顯示內(nèi)容讓題主產(chǎn)生了誤解,簡(jiǎn)單解釋一下吧:

PG中int4類型對(duì)應(yīng)的是SQL標(biāo)準(zhǔn)中的INTEGER類型,而且PG實(shí)現(xiàn)的是源生的integer類型,是定長(zhǎng)4字節(jié)(=32位bit)。其對(duì)應(yīng)的十進(jìn)制取值范圍是 -?21474836478 ~ ?2147483647?

因此,題主截圖所示的操作錯(cuò)誤如下:

  1. 第一第二張圖,題主在嘗試對(duì)一個(gè)INTGEGER類型的列修改其長(zhǎng)度:上文已述,INTEGER定長(zhǎng)的32位二進(jìn)制,因此這樣的操作必然是徒勞的。

    不過(guò)GUI也有值得吐槽的地方,其“長(zhǎng)度”概念似乎有二義性

  2. 第三第四張圖,題主分別嘗試向INTEGER類型的字段插入一個(gè) INTEGER范圍內(nèi)的值和一個(gè)INTEGER范圍外的值。因此第二次嘗試是失敗的(第二次的12345678901超過(guò)了INTEGER最大值2147483647?)

    另外,從題主的描述來(lái)看,題主似乎對(duì)于二進(jìn)制的位數(shù)和十進(jìn)制的位數(shù)沒(méi)分清。題主一直在強(qiáng)調(diào)要插入一個(gè)11位十進(jìn)制數(shù),可能題主看GUI里顯示INTEGER類型有"32位"就誤以為應(yīng)該能夠插入。但是實(shí)際上這里的32位是二進(jìn)制的位數(shù)(這也是我上文所述的GUI的槽點(diǎn): 等它顯示NUMERIC類型時(shí),長(zhǎng)度恐怕就又要變成了十進(jìn)制的長(zhǎng)度的意思了

最后,如果題主要插入11位的十進(jìn)制數(shù),可以考慮將列的類型改為BIGINT(int8)類型或直接用NUMERIC類型

2017年5月31日 03:06