GaussDB數(shù)據(jù)類型介紹
目錄:
一、GaussDB 數(shù)據(jù)庫
二、數(shù)據(jù)類型概念及特點(diǎn)
三、常用數(shù)據(jù)類型
1、常用字符串類型介紹
2、布爾類型
3、數(shù)值類型
4、日期/時間類型
四、數(shù)據(jù)類型選擇建議
附:GaussDB數(shù)據(jù)庫涉及的數(shù)據(jù)類型
一、GaussDB 數(shù)據(jù)庫
GaussDB是華為基于openGauss自研生態(tài)推出的云化企業(yè)級分布式關(guān)系型數(shù)據(jù)庫,它支持多種數(shù)據(jù)類型,包括數(shù)值、字符、日期等。在使用GaussDB時,可能需要進(jìn)行數(shù)據(jù)類型轉(zhuǎn)換,以滿足不同的需求。本文將以示例的形式羅列并介紹一些常見的數(shù)據(jù)類型轉(zhuǎn)換方法等。
二、數(shù)據(jù)類型概念及特點(diǎn)
數(shù)據(jù)類型是一組值的集合以及定義在這個值集上的一組操作。GaussDB數(shù)據(jù)庫是由表的集合組成的,而各表中的列定義了該表,每一列都屬于一種數(shù)據(jù)類型,GaussDB根據(jù)數(shù)據(jù)類型有相應(yīng)函數(shù)對其內(nèi)容進(jìn)行操作,例如GaussDB可對數(shù)值型數(shù)據(jù)進(jìn)行加、減、乘、除操作等。
數(shù)據(jù)類型是用來定義數(shù)據(jù)存儲格式和數(shù)據(jù)范圍的規(guī)范。每種數(shù)據(jù)類型都有自己的特點(diǎn)和適用范圍,它們在數(shù)據(jù)庫中的作用主要有以下幾點(diǎn):

存儲數(shù)據(jù):數(shù)據(jù)庫中的每個字段都必須指定數(shù)據(jù)類型,這樣才能確定它們在數(shù)據(jù)庫中的存儲格式。不同的數(shù)據(jù)類型使用不同的存儲方式,例如整型會以二進(jìn)制形式存儲,而字符型則以ASCII碼或Unicode編碼形式存儲。
約束數(shù)據(jù)范圍:數(shù)據(jù)類型可以限制某個字段存儲的數(shù)據(jù)范圍,例如整型只能存儲整數(shù)值,小數(shù)型只能存儲浮點(diǎn)數(shù)等。這樣可以確保數(shù)據(jù)的準(zhǔn)確性和完整性,防止非法值進(jìn)入數(shù)據(jù)庫。
提高查詢效率:數(shù)據(jù)庫在查詢數(shù)據(jù)時會根據(jù)字段的數(shù)據(jù)類型進(jìn)行優(yōu)化,例如對整型字段的查詢會比對字符型字段的查詢更快,因?yàn)檎妥侄蔚臄?shù)據(jù)存儲格式更簡單,計算也更快。
降低存儲空間:不同的數(shù)據(jù)類型使用不同的存儲方式,一些數(shù)據(jù)類型可以在存儲時減少存儲空間的占用。例如使用整型可以減少存儲空間的占用,因?yàn)檎驮诖鎯r只需要占用4個字節(jié),而字符型則需要占用更多的存儲空間。
提高數(shù)據(jù)安全性:數(shù)據(jù)類型可以幫助數(shù)據(jù)庫對數(shù)據(jù)進(jìn)行有效的過濾和驗(yàn)證,限制不合法的數(shù)據(jù)輸入,增強(qiáng)數(shù)據(jù)的安全性和可靠性。
綜上所述,數(shù)據(jù)類型在數(shù)據(jù)庫中扮演著極為重要的角色,它們不僅僅用于存儲數(shù)據(jù),還可以提高查詢效率、降低存儲空間、提高數(shù)據(jù)安全性等。數(shù)據(jù)庫開發(fā)人員在設(shè)計數(shù)據(jù)庫時必須充分了解各種數(shù)據(jù)類型的特點(diǎn)和使用場景,合理選用數(shù)據(jù)類型,才能保證數(shù)據(jù)庫的高效性和穩(wěn)定性。
?
三、常用數(shù)據(jù)類型
1、常用字符串類型介紹
在進(jìn)行字段設(shè)計時,需要根據(jù)數(shù)據(jù)特征選擇相應(yīng)的數(shù)據(jù)類型。字符串類型在使用時比較容易混淆,下表羅列了GaussDB中常見的字符串類型。
1)常用字符串類型

2)示例
2、布爾類型

1)說明
“真”值的有效文本值是:
TRUE、't'、'true'、'y'、'yes'、'1'以及所有非0整數(shù)。
“假”值的有效文本值是:
FALSE、'f'、'false'、'n'、'no'、'0'、0。
使用TRUE和FALSE是比較規(guī)范的用法(也是SQL兼容的用法)。
2)示例
3、數(shù)值類型
1)?整數(shù)類型
TINYINT、SMALLINT、INTEGER和BIGINT類型存儲各種范圍的數(shù)字,也就是整數(shù)。試圖存儲超出范圍以外的數(shù)值將會導(dǎo)致錯誤。
常用的類型是INTEGER,因?yàn)樗峁┝嗽诜秶?、存儲空間、性能之間的最佳平衡。一般只有取值范圍確定不超過SMALLINT的情況下,才會使用SMALLINT類型。而只有在INTEGER的范圍不夠的時候才使用BIGINT,因?yàn)榍罢呦鄬斓枚唷?/p>
2)示例
4、日期/時間類型
1)日期輸入說明:日期和時間的輸入幾乎可以是任何合理的格式,包括ISO-8601格式、SQL-兼容格式、傳統(tǒng)POSTGRES格式或者其它的形式。系統(tǒng)支持按照日、月、年的順序自定義日期輸入。如果把DateStyle參數(shù)設(shè)置為MDY就按照“月-日-年”解析,設(shè)置為DMY就按照“日-月-年”解析,設(shè)置為YMD就按照“年-月-日”解析。
日期的文本輸入需要加單引號包圍,語法:type [ ( p ) ] 'value',可選的精度聲明中的p是一個整數(shù),表示在秒域中小數(shù)部分的位數(shù)。

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

四、數(shù)據(jù)類型選擇建議
選擇數(shù)據(jù)類型,在字段設(shè)計時,基于查詢效率的考慮,一般遵循以下原則:
選擇數(shù)值類型時,在滿足業(yè)務(wù)精度的情況下,選擇數(shù)據(jù)類型的優(yōu)先級從高到低依次為整數(shù)、浮點(diǎn)數(shù)、NUMERIC。
使用一致的數(shù)據(jù)類型,當(dāng)多個表存在邏輯關(guān)系時,表示同一含義的字段應(yīng)該使用相同的數(shù)據(jù)類型。
對于字符串?dāng)?shù)據(jù),建議使用變長字符串?dāng)?shù)據(jù)類型,并指定最大長度。請務(wù)必確保指定的最大長度大于需要存儲的最大字符數(shù),避免超出最大長度時出現(xiàn)字符截斷現(xiàn)象。除非明確知道數(shù)據(jù)類型為固定長度字符串,否則,不建議使用CHAR(n)、BPCHAR(n)、NCHAR(n)、CHARACTER(n)。
索引字段的總長度不超過50字節(jié)。否則,索引大小會膨脹比較嚴(yán)重,帶來較大的存儲開銷,同時索引性能也會下降。
盡量使用執(zhí)行效率比較高的數(shù)據(jù)類型,一般來說整型數(shù)據(jù)運(yùn)算(包括=、>、<、≧、≦、≠等常規(guī)的比較運(yùn)算,以及group by)的效率比字符串、浮點(diǎn)數(shù)要高。比如某客戶場景中對列存表進(jìn)行點(diǎn)查詢,filter條件在一個numeric列上,執(zhí)行時間為10+s;修改numeric為int類型之后,執(zhí)行時間縮短為1.8s左右。
盡量使用短字段的數(shù)據(jù)類型:長度較短的數(shù)據(jù)類型不僅可以減小數(shù)據(jù)文件的大小,提升IO性能;同時也可以減小相關(guān)計算時的內(nèi)存消耗,提升計算性能。比如對于整型數(shù)據(jù),如果可以用smallint就盡量不用int,如果可以用int就盡量不用bigint。
表關(guān)聯(lián)列盡量使用相同的數(shù)據(jù)類型。如果表關(guān)聯(lián)列數(shù)據(jù)類型不同,數(shù)據(jù)庫必須動態(tài)地轉(zhuǎn)化為相同的數(shù)據(jù)類型進(jìn)行比較,這種轉(zhuǎn)換會帶來一定的性能開銷。
附:GaussDB數(shù)據(jù)庫涉及的數(shù)據(jù)類型
“數(shù)值類型、貨幣類型、布爾類型、字符類型、二進(jìn)制類型、日期/時間類型、幾何類型、網(wǎng)絡(luò)地址類型、位串類型、文本搜索類型、UUID類型、JSON/JSONB類型、HLL數(shù)據(jù)類型、范圍類型、對象標(biāo)識符類型、偽類型、列存表支持的數(shù)據(jù)類型、賬本數(shù)據(jù)庫使用的數(shù)據(jù)類型”。
詳見官方文檔:https://support.huaweicloud.com/intl/zh-cn/opengauss/index.html??
以上就是本期的內(nèi)容,歡迎大家測試、交流!