Postgresql 數(shù)據(jù)庫 varchar()字符占用多少字節(jié)介紹
如下所示:
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頁(數(shù)據(jù)庫的最小單位)
8頁 = 1區(qū) = 64KB(記不清磁頭一次取1區(qū)還是1頁數(shù)據(jù)了)
pg_relation_size()函數(shù)用于查詢表占用空間.
當(dāng)表創(chuàng)建的時(shí)候, 是不占空間的, 插入數(shù)據(jù)后, 數(shù)據(jù)庫至少使用1KB去保存數(shù)據(jù), 不夠會繼續(xù)增加.(不包含MateData)
首先postgresql中varchar()保存的是字符.
即可以插入3個(gè)中文, 也可以插入三個(gè)字母或者數(shù)字.
一般數(shù)據(jù)庫都是UTF-8編碼.
在UTF-8編碼下, 一個(gè)中文 3個(gè)字節(jié). 字母或者英文 1個(gè)字節(jié).
另外
1KB = 1024B = 1024Bytes
1Bytes = 1B = 8bit
補(bǔ)充:postgres數(shù)據(jù)庫varchar類型的最大長度
在分析一個(gè)場景時(shí),postgres中的一個(gè)字段存儲很長的字符串時(shí),是否可能存在問題。被問到varchar類型的最大長度,不是很清楚。
查了一下,記錄一下。
| 名字 | 描述 |
|---|---|
| character varying(n), varchar(n) | 變長,有長度限制 |
| character(n), char(n) | 定長,不足補(bǔ)空白 |
| text | 變長,無長度限制 |
簡單來說,varchar的長度可變,而char的長度不可變,對于postgresql數(shù)據(jù)庫來說varchar和char的區(qū)別僅僅在于前者是變長,而后者是定長,最大長度都是10485760(1GB)
varchar不指定長度,可以存儲最大長度(1GB)的字符串,而char不指定長度,默認(rèn)則為1,這點(diǎn)需要注意。
text類型:在postgresql數(shù)據(jù)庫里邊,text和varchar幾乎無性能差別,區(qū)別僅在于存儲結(jié)構(gòu)的不同。
對于char的使用,應(yīng)該在確定字符串長度的情況下使用,否則應(yīng)該選擇varchar或者text。
其他人說的最大長度是10485760,我不是DBA,也沒做過這個(gè)實(shí)驗(yàn)。但是有疑問,編碼格式不為UTF-8時(shí),是否還是10485760?
text類型是挺好用的,假如需要存儲一個(gè)復(fù)雜且結(jié)構(gòu)可能會變化的數(shù)據(jù),搞成json字符串存儲到text里也是很好的。感覺成了MongoDB
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
Mybatis調(diào)用PostgreSQL存儲過程實(shí)現(xiàn)數(shù)組入?yún)鬟f
這篇文章主要介紹了mybatis調(diào)用postgresql自定義函數(shù)傳遞數(shù)組參數(shù)的解決方案,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11
Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個(gè)事務(wù)
這篇文章主要介紹了Postgresql的pl/pgql使用操作--將多條執(zhí)行語句作為一個(gè)事務(wù),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01
Postgresql常用函數(shù)及使用方法大全(看一篇就夠了)
使用函數(shù)可以極大的提高用戶對數(shù)據(jù)庫的管理效率,函數(shù)表示輸入?yún)?shù)表示一個(gè)具有特定關(guān)系的值,下面這篇文章主要給大家介紹了關(guān)于Postgresql常用函數(shù)及使用方法的相關(guān)資料,需要的朋友可以參考下2022-11-11
Ruoyi從mysql切換到postgresql的幾個(gè)踩坑實(shí)戰(zhàn)
最近由于工作的原因,需要將Ruoyi從mysql切換到postgresql,所以這篇文章主要給大家介紹了關(guān)于Ruoyi從mysql切換到postgresql的幾個(gè)踩坑實(shí)戰(zhàn),需要的朋友可以參考下2023-02-02
基于PostgreSQL的時(shí)序數(shù)據(jù)庫TimescaleDB的基本用法和概念
時(shí)序數(shù)據(jù)是指按照時(shí)間順序存儲的數(shù)據(jù),TimescaleDB是一個(gè)開源的、擴(kuò)展了PostgreSQL的時(shí)序數(shù)據(jù)庫擴(kuò)展,本文就給大家詳細(xì)的介紹一下基于PostgreSQL的時(shí)序數(shù)據(jù)庫TimescaleDB的基本用法和概念,需要的朋友可以參考下2023-06-06
PostgreSQL模式匹配與正則表達(dá)式方法總結(jié)
在postgresql中使用正則表達(dá)式時(shí)需要使用關(guān)鍵字“~”,以表示該關(guān)鍵字之前的內(nèi)容需匹配之后的正則表達(dá)式,這篇文章主要給大家介紹了關(guān)于PostgreSQL模式匹配與正則表達(dá)式的相關(guān)資料,需要的朋友可以參考下2022-11-11
PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析
這篇文章主要介紹了PgSQl臨時(shí)表創(chuàng)建及應(yīng)用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-12-12
PostgreSQL有效地處理數(shù)據(jù)的加密和解密的常見方法
在信息化建設(shè)和等保建設(shè)中,都要求實(shí)現(xiàn)對用戶數(shù)據(jù)的隱私保護(hù),也就是我們常說的脫敏,那么在?PostgreSQL?數(shù)據(jù)庫中有沒有這樣的方法或者策略可以實(shí)現(xiàn)呢,本文小編將給大家介紹一下PostgreSQL有效地處理數(shù)據(jù)的加密和解密的常見方法,需要的朋友可以參考下2025-03-03

