openGauss中的常用數(shù)據(jù)類型
數(shù)值類型
整數(shù)類型
| 名稱 | 描述 | 存儲(chǔ)空間 | 范圍 |
|---|---|---|---|
| TINYINT | 微整數(shù),別名為INT1。 | 1字節(jié) | 0 ~ 255 |
| SMALLINT | 小范圍整數(shù),別名為INT2。 | 2字節(jié) | -32,768 ~ +32,767 |
| INTEGER | 常用的整數(shù),別名為INT4。 | 4字節(jié) | -2,147,483,648 ~ +2,147,483,647 |
| BINARY_INTEGER | 常用的整數(shù)INTEGER的別名。 | 4字節(jié) | -2,147,483,648 ~ +2,147,483,647 |
| BIGINT | 大范圍的整數(shù),別名為INT8。 | 8字節(jié) | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
| int16 | 十六字節(jié)的大范圍證書,目前不支持用戶用于建表等使用。 | 16字節(jié) | -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727 |
說(shuō)明:
- TINYINT、SMALLINT、INTEGER、BIGINT和INT16類型存儲(chǔ)各種范圍的數(shù)字,也就是整數(shù)。試圖存儲(chǔ)超出范圍以外的數(shù)值將會(huì)導(dǎo)致錯(cuò)誤。
- 常用的類型是INTEGER,因?yàn)樗峁┝嗽诜秶?、存?chǔ)空間、性能之間的最佳平衡。一般只有取值范圍確定不超過(guò)SMALLINT的情況下,才會(huì)使用SMALLINT類型。而只有在INTEGER的范圍不夠的時(shí)候才使用BIGINT,因?yàn)榍罢呦鄬?duì)快得多。
任意精度型
| 名稱 | 描述 | 存儲(chǔ)空間 | 范圍 |
|---|---|---|---|
| NUMERIC[(p[,s])],DECIMAL[(p[,s])] | 精度p取值范圍為[1,1000],標(biāo)度s取值范圍為[0,p]。說(shuō)明:p為總位數(shù),s為小數(shù)位數(shù)。 | 用戶聲明精度。每四位(十進(jìn)制位)占用兩個(gè)字節(jié),然后在整個(gè)數(shù)據(jù)上加上八個(gè)字節(jié)的額外開銷。 | 未指定精度的情況下,小數(shù)點(diǎn)前最大131,072位,小數(shù)點(diǎn)后最大16,383位。 |
| NUMBER[(p[,s])] | NUMERIC類型的別名。 | 用戶聲明精度。每四位(十進(jìn)制位)占用兩個(gè)字節(jié),然后在整個(gè)數(shù)據(jù)上加上八個(gè)字節(jié)的額外開銷。 | 未指定精度的情況下,小數(shù)點(diǎn)前最大131,072位,小數(shù)點(diǎn)后最大16,383位。 |
說(shuō)明:
- 與整數(shù)類型相比,任意精度類型需要更大的存儲(chǔ)空間,其存儲(chǔ)效率、運(yùn)算效率以及壓縮比效果都要差一些。在進(jìn)行數(shù)值類型定義時(shí),優(yōu)先選擇整數(shù)類型。當(dāng)且僅當(dāng)數(shù)值超出整數(shù)可表示最大范圍時(shí),再選用任意精度類型。
- 使用Numeric/Decimal進(jìn)行列定義時(shí),建議指定該列的精度p以及標(biāo)度s。
序列整型
| 名稱 | 描述 | 存儲(chǔ)空間 | 范圍 |
|---|---|---|---|
| SMALLSERIAL | 二字節(jié)序列整型。 | 2字節(jié) | -32,768 ~ +32,767 |
| SERIAL | 四字節(jié)序列整型。 | 4字節(jié) | -2,147,483,648 ~ +2,147,483,647 |
| BIGSERIAL | 八字節(jié)序列整型。 | 8字節(jié) | -9,223,372,036,854,775,808 ~ +9,223,372,036,854,775,807 |
| LARGESERIAL | 十六字節(jié)序列整形。 | 16字節(jié) | -170,141,183,460,469,231,731,687,303,715,884,105,728 ~ +170,141,183,460,469,231,731,687,303,715,884,105,727 |
說(shuō)明:
SMALLSERIAL、SERIAL、BIGSERIAL和LARGESERIAL類型不是真正的類型,只是為在表中設(shè)置唯一標(biāo)識(shí)做的概念上的便利。因此,創(chuàng)建一個(gè)整數(shù)字段,并且把它的缺省數(shù)值安排為從一個(gè)序列發(fā)生器讀取。應(yīng)用了一個(gè)NOT NULL約束以確保NULL不會(huì)被插入。在大多數(shù)情況下用戶可能還希望附加一個(gè)UNIQUE或PRIMARY KEY約束避免意外地插入重復(fù)的數(shù)值,但這個(gè)不是自動(dòng)的。最后,將序列發(fā)生器從屬于那個(gè)字段,這樣當(dāng)該字段或表被刪除的時(shí)候也一并刪除它。目前只支持在創(chuàng)建表時(shí)候指定SERIAL列,不可以在已有的表中,增加SERIAL列。另外臨時(shí)表也不支持創(chuàng)建SERIAL列。因?yàn)镾ERIAL不是真正的類型,也不可以將表中存在的列類型轉(zhuǎn)化為SERIAL。
浮點(diǎn)類型
| 名稱 | 描述 | 存儲(chǔ)空間 | 范圍 |
|---|---|---|---|
| REAL,FLOAT4 | 單精度浮點(diǎn)數(shù),不精準(zhǔn)。 | 4字節(jié) | -3.402E+38~3.402E+38,6位十進(jìn)制數(shù)字精度。 |
| DOUBLE PRECISION,FLOAT8 | 雙精度浮點(diǎn)數(shù),不精準(zhǔn)。 | 8字節(jié) | -1.79E+308~1.79E+308,15位十進(jìn)制數(shù)字精度。 |
| FLOAT[(p)] | 浮點(diǎn)數(shù),不精準(zhǔn)。精度p取值范圍為[1,53]。說(shuō)明:p為精度,表示總位數(shù)。 | 4字節(jié)或8字節(jié) | 根據(jù)精度p不同選擇REAL或DOUBLE PRECISION作為內(nèi)部表示。如不指定精度,內(nèi)部用DOUBLE PRECISION表示。 |
| BINARY_DOUBLE | 是DOUBLE PRECISION的別名。 | 8字節(jié) | -1.79E+308~1.79E+308,15位十進(jìn)制數(shù)字精度。 |
| DEC[(p[,s])] | 精度p取值范圍為[1,1000],標(biāo)度s取值范圍為[0,p]。說(shuō)明:p為總位數(shù),s為小數(shù)位位數(shù)。 | 用戶聲明精度。每四位(十進(jìn)制位)占用兩個(gè)字節(jié),然后在整個(gè)數(shù)據(jù)上加上八個(gè)字節(jié)的額外開銷。 | 未指定精度的情況下,小數(shù)點(diǎn)前最大131,072位,小數(shù)點(diǎn)后最大16,383位。 |
| INTEGER[(p[,s])] | 精度p取值范圍為[1,1000],標(biāo)度s取值范圍為[0,p]。 | 用戶聲明精度。每四位(十進(jìn)制位)占用兩個(gè)字節(jié),然后在整個(gè)數(shù)據(jù)上加上八個(gè)字節(jié)的額外開銷。 | - |
貨幣類型
| 名稱 | 存儲(chǔ)容量 | 描述 | 范圍 |
|---|---|---|---|
| money | 8 字節(jié) | 貨幣金額 | -92233720368547758.08 到 +92233720368547758.07 |
布爾類型
| 名稱 | 描述 | 存儲(chǔ)空間 | 取值 |
|---|---|---|---|
| BOOLEAN | 布爾類型 | 1字節(jié)。 | true:真false:假null:未知(unknown) |
-
“真”值的有效文本值是:
TRUE、't'、'true'、'y'、'yes'、'1' 、'TRUE'、true、整數(shù)范圍內(nèi)12^63-1、整數(shù)范圍內(nèi)-1-2^63。
-
“假”值的有效文本值是:
FALSE、'f'、'false'、'n'、'no'、'0'、0、'FALSE'、false。
字符類型
| 名稱 | 描述 | 存儲(chǔ)空間 |
|---|---|---|
| CHAR(n)CHARACTER(n)NCHAR(n) | 定長(zhǎng)字符串,不足補(bǔ)空格。n是指字節(jié)長(zhǎng)度,如不帶精度n,默認(rèn)精度為1。 | 最大為10MB。 |
| VARCHAR(n)CHARACTER VARYING(n) | 變長(zhǎng)字符串。PG兼容模式下,n是字符長(zhǎng)度。其他兼容模式下,n是指字節(jié)長(zhǎng)度。 | 最大為10MB。 |
| VARCHAR2(n) | 變長(zhǎng)字符串。是VARCHAR(n)類型的別名。n是指字節(jié)長(zhǎng)度。 | 最大為10MB。 |
| NVARCHAR2(n) | 變長(zhǎng)字符串。n是指字符長(zhǎng)度。 | 最大為10MB。 |
| NVARCHAR(n) | 變長(zhǎng)字符串。是NVARCHAR2(n)類型的別名。n是指字符長(zhǎng)度。 | 最大為10MB。 |
| TEXT | 變長(zhǎng)字符串。 | 最大為1GB-1,但還需要考慮到列描述頭信息的大小, 以及列所在元組的大小限制(也小于1GB-1),因此TEXT類型最大大小可能小于1GB-1。 |
| CLOB | 文本大對(duì)象。是TEXT類型的別名。 | 最大為1GB-1,但還需要考慮到列描述頭信息的大小, 以及列所在元組的大小限制(也小于1GB-1),因此CLOB類型最大大小可能小于1GB-1。 |
說(shuō)明:
除了每列的大小限制以外,每個(gè)元組的總大小也不可超過(guò)1GB-1字節(jié),主要受列的控制頭信息、元組控制頭信息以及元組中是否存在NULL字段等影響。
NCHAR為bpchar類型的別名,NCHAR(n)為bpchar(n)類型的別名。
超過(guò)1GB的clob只有dbe_lob相關(guān)高級(jí)包支持,系統(tǒng)函數(shù)不支持大于1GBclob。