1. 程式人生 > 資料庫 >Postgresql 資料庫 varchar()字元佔用多少位元組介紹

Postgresql 資料庫 varchar()字元佔用多少位元組介紹

如下所示:

create table tmp1
(
name varchar(3)
);

select pg_size_pretty(pg_relation_size('tmp1'));
-- 0 bytes

insert into tmp(name) values('歐陽子');
-- 8192 bytes

8192 bytes = 8KB = 1頁(資料庫的最小單位)

8頁 = 1區 = 64KB(記不清磁頭一次取1區還是1頁資料了)

pg_relation_size()函式用於查詢表佔用空間.

當表建立的時候,是不佔空間的,插入資料後,資料庫至少使用1KB去儲存資料,不夠會繼續增加.(不包含MateData)

首先postgresql中varchar()儲存的是字元.

即可以插入3箇中文,也可以插入三個字母或者數字.

一般資料庫都是UTF-8編碼.

在UTF-8編碼下,一箇中文 3個位元組. 字母或者英文 1個位元組.

另外

1KB = 1024B = 1024Bytes

1Bytes = 1B = 8bit

補充:postgres資料庫varchar型別的最大長度

在分析一個場景時,postgres中的一個欄位儲存很長的字串時,是否可能存在問題。被問到varchar型別的最大長度,不是很清楚。

查了一下,記錄一下。

名字 描述
character varying(n),varchar(n) 變長,有長度限制
character(n),char(n) 定長,不足補空白
text 變長,無長度限制

簡單來說,varchar的長度可變,而char的長度不可變,對於postgresql資料庫來說varchar和char的區別僅僅在於前者是變長,而後者是定長,最大長度都是10485760(1GB)

varchar不指定長度,可以儲存最大長度(1GB)的字串,而char不指定長度,預設則為1,這點需要注意。

text型別:在postgresql資料庫裡邊,text和varchar幾乎無效能差別,區別僅在於儲存結構的不同。

對於char的使用,應該在確定字串長度的情況下使用,否則應該選擇varchar或者text。

其他人說的最大長度是10485760,我不是DBA,也沒做過這個實驗。但是有疑問,編碼格式不為UTF-8時,是否還是10485760?

text型別是挺好用的,假如需要儲存一個複雜且結構可能會變化的資料,搞成json字串儲存到text裡也是很好的。感覺成了MongoDB

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援我們。如有錯誤或未考慮完全的地方,望不吝賜教。