- 字符串類型
PostgreSQL中字符串類型指 char禀苦、varchar和text冈敛。
類型 | 說(shuō)明 |
---|---|
char(n)/character(n) | 固定長(zhǎng)度非二進(jìn)制字符串,不足補(bǔ)空白 |
varchar(n)/character varying(n) | 變長(zhǎng)非二進(jìn)制字符串乳幸,有長(zhǎng)度限制 |
text | 變長(zhǎng)非二進(jìn)制字符串,無(wú)長(zhǎng)度限制 |
在PostgreSQL中钧椰,這三種類型的字符串?dāng)?shù)據(jù)并沒有明顯的性能差別粹断,而character(n)類型的數(shù)據(jù)因?yàn)楣潭ㄩL(zhǎng)度導(dǎo)致更多的存儲(chǔ)空間。所以嫡霞,一般來(lái)說(shuō)瓶埋,推薦使用text或者character varying就行了。
create table tmp_str(ch char(4),vch varchar(4),txt text);
insert into tmp_str values ('ab','cd','efghijklmn');
- 數(shù)組類型
PostgreSQL允許將字段定義成變長(zhǎng)的多維數(shù)組, 數(shù)組類型可以是任何基本類型或用戶定義類型养筒。
為說(shuō)明這些用法狡汉,我們先創(chuàng)建一個(gè)由基本類型數(shù)組構(gòu)成的表
create table tmp_array(name text,pay_by_quarter integer[5],schedule text[][]);
如上所示,一個(gè)數(shù)組類型是通過(guò)在數(shù)組元素類型名后面附加中括號(hào)([])來(lái)命名的闽颇。目前盾戴,PostgreSQL并不強(qiáng)制聲明數(shù)組的長(zhǎng)度,所以上述聲明長(zhǎng)度和不聲明長(zhǎng)度是一樣的兵多。特定元素類型的數(shù)組都被認(rèn)為是相同的類型尖啡, 不管他們的大小或者維數(shù)。
數(shù)組類型的使用
#插入數(shù)據(jù)
insert into tmp_array values ('array test','{1,2,3}','{{"meeting", "lunch"}, {"training", "presentation"}}');
#查詢
select name from tmp_array where pay_by_quarter[1] <> pay_by_quarter[2];
select pay_by_quarter[3] from tmp_array;
- 二進(jìn)制類型
PostgreSQL提供了bytea類型剩膘,用來(lái)存儲(chǔ)二進(jìn)制字符串
|數(shù)據(jù)類型|說(shuō)明|長(zhǎng)度|
|-||
|bytea|變長(zhǎng)的二進(jìn)制字符串|4字節(jié)加上實(shí)際的二進(jìn)制字符串長(zhǎng)度|
二進(jìn)制字符串是一個(gè)字節(jié)序列衅斩。二進(jìn)制字符串和普通字符字符串的區(qū)別有兩個(gè):
- 二進(jìn)制字符串完全可以存儲(chǔ)字節(jié)零值以及其它"不可打印的" 字節(jié)(定義在 32 到 126 范圍之外的字節(jié))。字符串不允許字節(jié)零值怠褐, 并且也不允許那些不符合選定的字符集編碼的非法字節(jié)值或者字節(jié)序列畏梆。
- 對(duì)二進(jìn)制字符串的處理實(shí)際上就是處理字節(jié),而對(duì)字符串的處理則取決于區(qū)域設(shè)置奈懒。 簡(jiǎn)單說(shuō)奠涌,二進(jìn)制字符串適用于存儲(chǔ)那些程序員認(rèn)為是"原始字節(jié)"的數(shù)據(jù), 而字符串適合存儲(chǔ)文本磷杏。
- 布爾類型
PostgreSQL支持SQL標(biāo)準(zhǔn)的 boolean數(shù)據(jù)類型溜畅。 boolean只能有 true/false/unknown(用NULL表示)三種狀態(tài)。
|數(shù)據(jù)類型|說(shuō)明|占用空間|
|-||
|boolean|true/false/unknown|1個(gè)字節(jié)(以t或f存儲(chǔ))
代表真和假的有效文本极祸,真(true/t/yes/y/on/1) 假(false/f/no/n/off/0)
create table test1 (a boolean, b text);
insert into test1 values ('t','this value is true'),('off','this value is false');