Postgresql 數(shù)據(jù)庫(kù) varchar()字符占用多少字節(jié)介紹
如下所示:
create table tmp1 ( name varchar(3) ); select pg_size_pretty(pg_relation_size('tmp1')); -- 0 bytes insert into tmp(name) values('歐陽(yáng)子'); -- 8192 bytes
8192 bytes = 8KB = 1頁(yè)(數(shù)據(jù)庫(kù)的最小單位)
8頁(yè) = 1區(qū) = 64KB(記不清磁頭一次取1區(qū)還是1頁(yè)數(shù)據(jù)了)
pg_relation_size()函數(shù)用于查詢表占用空間.
當(dāng)表創(chuàng)建的時(shí)候, 是不占空間的, 插入數(shù)據(jù)后, 數(shù)據(jù)庫(kù)至少使用1KB去保存數(shù)據(jù), 不夠會(huì)繼續(xù)增加.(不包含MateData)
首先postgresql中varchar()保存的是字符.
即可以插入3個(gè)中文, 也可以插入三個(gè)字母或者數(shù)字.
一般數(shù)據(jù)庫(kù)都是UTF-8編碼.
在UTF-8編碼下, 一個(gè)中文 3個(gè)字節(jié). 字母或者英文 1個(gè)字節(jié).
另外
1KB = 1024B = 1024Bytes
1Bytes = 1B = 8bit
補(bǔ)充:postgres數(shù)據(jù)庫(kù)varchar類型的最大長(zhǎng)度
在分析一個(gè)場(chǎng)景時(shí),postgres中的一個(gè)字段存儲(chǔ)很長(zhǎng)的字符串時(shí),是否可能存在問題。被問到varchar類型的最大長(zhǎng)度,不是很清楚。
查了一下,記錄一下。
名字 | 描述 |
---|---|
character varying(n), varchar(n) | 變長(zhǎng),有長(zhǎng)度限制 |
character(n), char(n) | 定長(zhǎng),不足補(bǔ)空白 |
text | 變長(zhǎng),無(wú)長(zhǎng)度限制 |
簡(jiǎn)單來(lái)說(shuō),varchar的長(zhǎng)度可變,而char的長(zhǎng)度不可變,對(duì)于postgresql數(shù)據(jù)庫(kù)來(lái)說(shuō)varchar和char的區(qū)別僅僅在于前者是變長(zhǎng),而后者是定長(zhǎng),最大長(zhǎng)度都是10485760(1GB)
varchar不指定長(zhǎng)度,可以存儲(chǔ)最大長(zhǎng)度(1GB)的字符串,而char不指定長(zhǎng)度,默認(rèn)則為1,這點(diǎn)需要注意。
text類型:在postgresql數(shù)據(jù)庫(kù)里邊,text和varchar幾乎無(wú)性能差別,區(qū)別僅在于存儲(chǔ)結(jié)構(gòu)的不同。
對(duì)于char的使用,應(yīng)該在確定字符串長(zhǎng)度的情況下使用,否則應(yīng)該選擇varchar或者text。
其他人說(shuō)的最大長(zhǎng)度是10485760,我不是DBA,也沒做過(guò)這個(gè)實(shí)驗(yàn)。但是有疑問,編碼格式不為UTF-8時(shí),是否還是10485760?
text類型是挺好用的,假如需要存儲(chǔ)一個(gè)復(fù)雜且結(jié)構(gòu)可能會(huì)變化的數(shù)據(jù),搞成json字符串存儲(chǔ)到text里也是很好的。感覺成了MongoDB
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
相關(guān)文章
PostgreSQL中date_trunc函數(shù)的語(yǔ)法及一些示例
這篇文章主要給大家介紹了關(guān)于PostgreSQL中date_trunc函數(shù)的語(yǔ)法及一些示例的相關(guān)資料,DATE_TRUNC函數(shù)是PostgreSQL數(shù)據(jù)庫(kù)中用于截?cái)嗳掌诓糠值暮瘮?shù),文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04PostgreSQL存儲(chǔ)過(guò)程用法實(shí)戰(zhàn)詳解
這篇文章主要介紹了PostgreSQL存儲(chǔ)過(guò)程用法,結(jié)合具體實(shí)例詳細(xì)分析了PostgreSQL數(shù)據(jù)庫(kù)存儲(chǔ)過(guò)程的定義、使用方法及相關(guān)操作注意事項(xiàng),并附帶一個(gè)完整實(shí)例供大家參考,需要的朋友可以參考下2018-08-08Postgresql去重函數(shù)distinct的用法說(shuō)明
這篇文章主要介紹了Postgresql去重函數(shù)distinct的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01postgresql之使用lsn 獲取 wal文件名的實(shí)例
這篇文章主要介紹了postgresql之使用lsn 獲取 wal文件名的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-01-01使用postgresql獲取當(dāng)前或某一時(shí)間段的年月日
這篇文章主要給大家介紹了關(guān)于使用postgresql獲取當(dāng)前或某一時(shí)間段的年月日的相關(guān)資料,在PostgreSQL中可以使用函數(shù) NOW() 來(lái)查詢當(dāng)前時(shí)間,文中通過(guò)代碼示例介紹的非常詳細(xì),需要的朋友可以參考下2023-07-07如何解決PostgreSQL執(zhí)行語(yǔ)句長(zhǎng)時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行的問題
某日開發(fā)同事上報(bào)一sql性能問題,一條查詢好似一直跑不出結(jié)果,查詢了n小時(shí),還未返回結(jié)果,這篇文章主要給大家介紹了關(guān)于如何解決PostgreSQL執(zhí)行語(yǔ)句長(zhǎng)時(shí)間卡著不動(dòng)不報(bào)錯(cuò)也不執(zhí)行問題的相關(guān)資料,需要的朋友可以參考下2024-02-02對(duì)PostgreSQL中的慢查詢進(jìn)行分析和優(yōu)化的操作指南
在數(shù)據(jù)庫(kù)的世界里,慢查詢就像是路上的絆腳石,讓數(shù)據(jù)處理的道路變得崎嶇不平,想象一下,你正在高速公路上飛馳,突然遇到一堆減速帶,那感覺肯定糟透了,本文介紹了怎樣對(duì)?PostgreSQL?中的慢查詢進(jìn)行分析和優(yōu)化,需要的朋友可以參考下2024-07-07Postgresql開啟SQL執(zhí)行語(yǔ)句收集過(guò)程
本文介紹如何修改PostgreSQL的配置文件來(lái)啟用SQL執(zhí)行語(yǔ)句的日志記錄,包括打開配置文件、修改日志相關(guān)設(shè)置以及查看日志文件的方法,關(guān)鍵步驟包括刪除注釋符號(hào)、設(shè)定日志存儲(chǔ)路徑和文件名、選擇記錄的SQL語(yǔ)句類型,此操作有助于數(shù)據(jù)庫(kù)管理和問題調(diào)試2024-10-10詳解PostgreSQL 語(yǔ)法中關(guān)鍵字的添加
這篇文章主要介紹了詳解PostgreSQL 語(yǔ)法中關(guān)鍵字的添加的相關(guān)資料,這里說(shuō)明下在parser語(yǔ)法解析模塊添加關(guān)鍵字,需要的朋友可以參考下2017-08-08