如下所示:
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區(qū) = 64KB(記不清磁頭一次取1區(qū)還是1頁數據了)
pg_relation_size()函數用于查詢表占用空間.
當表創(chuàng)建的時候, 是不占空間的, 插入數據后, 數據庫至少使用1KB去保存數據, 不夠會繼續(xù)增加.(不包含MateData)
首先postgresql中varchar()保存的是字符.
即可以插入3個中文, 也可以插入三個字母或者數字.
一般數據庫都是UTF-8編碼.
在UTF-8編碼下, 一個中文 3個字節(jié). 字母或者英文 1個字節(jié).
另外
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的區(qū)別僅僅在于前者是變長,而后者是定長,最大長度都是10485760(1GB)
varchar不指定長度,可以存儲最大長度(1GB)的字符串,而char不指定長度,默認則為1,這點需要注意。
text類型:在postgresql數據庫里邊,text和varchar幾乎無性能差別,區(qū)別僅在于存儲結構的不同。
對于char的使用,應該在確定字符串長度的情況下使用,否則應該選擇varchar或者text。
其他人說的最大長度是10485760,我不是DBA,也沒做過這個實驗。但是有疑問,編碼格式不為UTF-8時,是否還是10485760?
text類型是挺好用的,假如需要存儲一個復雜且結構可能會變化的數據,搞成json字符串存儲到text里也是很好的。感覺成了MongoDB
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。如有錯誤或未考慮完全的地方,望不吝賜教。