GaussDB數據類型介紹

語言: CN / TW / HK

 

文章目錄

  • 一、GaussDB 數據庫
  • 二、數據類型概念及特點
  • 三、常用數據類型
    • 1、常用字符串類型介紹
    • 2、布爾類型
    • 3、數值類型
    • 4、日期/時間類型
  • 四、數據類型選擇建議

 

一、GaussDB 數據庫

GaussDB是華為基於openGauss自研生態推出的雲化企業級分佈式關係型數據庫,它支持多種數據類型,包括數值、字符、日期等。在使用GaussDB時,可能需要進行數據類型轉換,以滿足不同的需求。本文將以示例的形式羅列並介紹一些常見的數據類型轉換方法等。

二、數據類型概念及特點

數據類型是一組值的集合以及定義在這個值集上的一組操作。GaussDB數據庫是由表的集合組成的,而各表中的列定義了該表,每一列都屬於一種數據類型,GaussDB根據數據類型有相應函數對其內容進行操作,例如GaussDB可對數值型數據進行加、減、乘、除操作等。

數據類型是用來定義數據存儲格式和數據範圍的規範。每種數據類型都有自己的特點和適用範圍,它們在數據庫中的作用主要有以下幾點:

  • 存儲數據:數據庫中的每個字段都必須指定數據類型,這樣才能確定它們在數據庫中的存儲格式。不同的數據類型使用不同的存儲方式,例如整型會以二進制形式存儲,而字符型則以ASCII碼或Unicode編碼形式存儲。
  • 約束數據範圍:數據類型可以限制某個字段存儲的數據範圍,例如整型只能存儲整數值,小數型只能存儲浮點數等。這樣可以確保數據的準確性和完整性,防止非法值進入數據庫。
  • 提高查詢效率:數據庫在查詢數據時會根據字段的數據類型進行優化,例如對整型字段的查詢會比對字符型字段的查詢更快,因為整型字段的數據存儲格式更簡單,計算也更快。
  • 降低存儲空間:不同的數據類型使用不同的存儲方式,一些數據類型可以在存儲時減少存儲空間的佔用。例如使用整型可以減少存儲空間的佔用,因為整型在存儲時只需要佔用4個字節,而字符型則需要佔用更多的存儲空間。
  • 提高數據安全性:數據類型可以幫助數據庫對數據進行有效的過濾和驗證,限制不合法的數據輸入,增強數據的安全性和可靠性。

綜上所述,數據類型在數據庫中扮演着極為重要的角色,它們不僅僅用於存儲數據,還可以提高查詢效率、降低存儲空間、提高數據安全性等。數據庫開發人員在設計數據庫時必須充分了解各種數據類型的特點和使用場景,合理選用數據類型,才能保證數據庫的高效性和穩定性。

三、常用數據類型

1、常用字符串類型介紹

在進行字段設計時,需要根據數據特徵選擇相應的數據類型。字符串類型在使用時比較容易混淆,下表羅列了GaussDB中常見的字符串類型。
1)常用字符串類型

2)示例

--創建表。
CREATE TABLE t_char_type
(
  column1 VARCHAR(5)
)DISTRIBUTE BY HASH (column1);

--插入數據。
INSERT INTO t_char_type VALUES ('ok');

--插入的數據長度超過類型規定的長度報錯。
INSERT INTO t_char_type VALUES ('too long');
ERROR:  value too long for type character varying(5)
CONTEXT:  referenced column: column1

--明確類型的長度,超過數據類型長度後會自動截斷。
INSERT INTO t_char_type VALUES ('too long'::varchar(5));

--查詢數據。
SELECT column1, char_length(column1) FROM t_char_type;
 column1 | char_length 
---------+-------------
 ok      |           2
 too l   |           5
(2 rows)

2、布爾類型

1)説明
“真”值的有效文本值是:
TRUE、‘t’、‘true’、‘y’、‘yes’、'1’以及所有非0整數。
“假”值的有效文本值是:
FALSE、‘f’、‘false’、‘n’、‘no’、‘0’、0。
使用TRUE和FALSE是比較規範的用法(也是SQL兼容的用法)。

2)示例

--創建表。
CREATE TABLE t_bool_type  
(
    column1 BOOLEAN,
    column2 TEXT
)DISTRIBUTE BY HASH(column2);

--插入數據。
INSERT INTO t_bool_type VALUES (TRUE, 'one');
INSERT INTO t_bool_type VALUES (FALSE, 'two');

--查看數據。
SELECT * FROM t_bool_type;
 column1 | column2 
---------+---------
 t       | one
 f       | two
(2 rows)

SELECT * FROM t_bool_type WHERE column1 = 't';
 column1 | column2 
---------+---------
 t       | one
(1 row)

3、數值類型

1) 整數類型

  • TINYINT、SMALLINT、INTEGER和BIGINT類型存儲各種範圍的數字,也就是整數。試圖存儲超出範圍以外的數值將會導致錯誤。
  • 常用的類型是INTEGER,因為它提供了在範圍、存儲空間、性能之間的最佳平衡。一般只有取值範圍確定不超過SMALLINT的情況下,才會使用SMALLINT類型。而只有在INTEGER的範圍不夠的時候才使用BIGINT,因為前者相對快得多。

2)示例

--創建具有TINYINT,INTEGER,BIGINT類型數據的表。
openGauss=# CREATE TABLE t_int_type
(
    column1 TINYINT, 
    column2 TINYINT,
    column3 INTEGER,
    column4 BIGINT
);

--插入數據。
openGauss=# INSERT INTO int_type_t2 VALUES(100, 10, 1000, 10000);

--查看數據。
openGauss=# SELECT * FROM int_type_t2;
 column1  | column2  | column3   | column4   
-----------+----------+------------+-------
 100       | 10       | 1000      | 10000
(1 row)

4、日期/時間類型

1)日期輸入説明:日期和時間的輸入幾乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、傳統POSTGRES格式或者其它的形式。系統支持按照日、月、年的順序自定義日期輸入。如果把DateStyle參數設置為MDY就按照“月-日-年”解析,設置為DMY就按照“日-月-年”解析,設置為YMD就按照“年-月-日”解析。
日期的文本輸入需要加單引號包圍,語法:type [ ( p ) ] ‘value’,可選的精度聲明中的p是一個整數,表示在秒域中小數部分的位數。

2)時間段輸入説明:reltime的輸入方式可以採用任何合法的時間段文本格式,包括數字形式(含負數和小數)及時間形式,其中時間形式的輸入支持SQL標準格式、ISO-8601格式、POSTGRES格式等。另外,文本輸入需要加單引號。

四、數據類型選擇建議

選擇數據類型,在字段設計時,基於查詢效率的考慮,一般遵循以下原則:

  • 選擇數值類型時,在滿足業務精度的情況下,選擇數據類型的優先級從高到低依次為整數、浮點數、NUMERIC。
  • 使用一致的數據類型,當多個表存在邏輯關係時,表示同一含義的字段應該使用相同的數據類型。
  • 對於字符串數據,建議使用變長字符串數據類型,並指定最大長度。請務必確保指定的最大長度大於需要存儲的最大字符數,避免超出最大長度時出現字符截斷現象。除非明確知道數據類型為固定長度字符串,否則,不建議使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。
  • 索引字段的總長度不超過50字節。否則,索引大小會膨脹比較嚴重,帶來較大的存儲開銷,同時索引性能也會下降。
  • 儘量使用執行效率比較高的數據類型,一般來説整型數據運算(包括=、>、<、≧、≦、≠等常規的比較運算,以及group by)的效率比字符串、浮點數要高。比如某客户場景中對列存表進行點查詢,filter條件在一個numeric列上,執行時間為10+s;修改numeric為int類型之後,執行時間縮短為1.8s左右。
  • 儘量使用短字段的數據類型:長度較短的數據類型不僅可以減小數據文件的大小,提升IO性能;同時也可以減小相關計算時的內存消耗,提升計算性能。比如對於整型數據,如果可以用smallint就儘量不用int,如果可以用int就儘量不用bigint。
  • 表關聯列儘量使用相同的數據類型。如果表關聯列數據類型不同,數據庫必須動態地轉化為相同的數據類型進行比較,這種轉換會帶來一定的性能開銷。

附:GaussDB數據庫涉及的數據類型
“數值類型、貨幣類型、布爾類型、字符類型、二進制類型、日期/時間類型、幾何類型、網絡地址類型、位串類型、文本搜索類型、UUID類型、JSON/JSONB類型、HLL數據類型、範圍類型、對象標識符類型、偽類型、列存表支持的數據類型、賬本數據庫使用的數據類型”。

詳見官方文檔:http://support.huaweicloud.com/intl/zh-cn/opengauss/index.html

以上就是本期的內容,歡迎大家測試、交流!